当前位置: 首页 > news >正文

郑州网站建设 郑州网站设计画册设计公司网站

郑州网站建设 郑州网站设计,画册设计公司网站,1 设计一个企业网站,建设银行海外招聘网站一、require模块是否需要import 用 Node.js 的 require 加载模块时#xff0c;不需要用 import。 这两者其实是两套不同的模块系统#xff1a; require 是 Node.js 传统的 CommonJS 模块加载方式。 import 是 ECMAScript 2015#xff08;ES6#xff09;的 ES Modules 语…一、require模块是否需要import 用 Node.js 的 require 加载模块时不需要用 import。 这两者其实是两套不同的模块系统 require 是 Node.js 传统的 CommonJS 模块加载方式。 import 是 ECMAScript 2015ES6的 ES Modules 语法。 区别简要说明 方式语法形式运行环境支持情况requireconst x require(x)Node.js 默认支持所有版本CommonJS 模块动态加载importimport x from x浏览器和 Node.js需配置ES Modules静态加载 在 Node.js 中 如果用 .js 文件默认CommonJS 模式用 require 加载不能用 import会报错除非用实验特性或 .mjs 文件。 如果想用 ES Module文件一般用 .mjs 后缀或者 package.json 中设置 type: module这时用 import不能用 require。 结论 你只用 require 就够了不需要 import。 这两者是两种不同的模块加载语法不要混用。 二、Node.js 中 require 的完整模块加载过程重点版 检查缓存区require.cache 先查用户加载的文件模块的缓存区以文件绝对路径为key。如果缓存命中直接返回缓存内容。 注意缓存只针对文件模块JavaScript 文件、JSON 文件、.node 二进制模块。 判断是否是核心模块Core Module 如果缓存没命中接下来判断这个模块名是否是 Node.js 的核心模块比如 fs、http、path 等。 核心模块的加载是从 Node.js 内部直接提供的不经过文件系统查找。 Node 有一个核心模块缓存和 require.cache 不同如果命中则直接返回核心模块的导出。 如果核心模块第一次加载会加载并缓存核心模块实例。 模块路径解析 如果不是核心模块进行路径解析查找文件系统上的具体文件位置支持相对路径、绝对路径、node_modules 目录等。 读取并编译模块 读取文件内容后根据类型执行对应操作JavaScript、JSON、native addon。 缓存模块 编译执行完成后将模块缓存到 require.cache。 返回模块导出 核心模块缓存和文件模块缓存是分开的 require.cache 只缓存文件模块的导出。 核心模块缓存由 Node.js 内部管理用户不可见但效果是类似的只会加载一次。 如果想看源码Node.js 的模块加载逻辑主要在 lib/internal/modules/cjs/loader.js 中尤其是 Module._load 实现了缓存判断和核心模块判断的逻辑。 NativeModule.get 用于加载核心模块。 总结 require(module) 过程是1. 查看文件模块缓存 require.cache 2. 若没命中判断是否核心模块内置模块- 是则从内置模块缓存返回 3. 否则解析文件路径加载文件模块 4. 编译执行缓存 5. 返回模块导出你之前代码的补充说明 const mod1 require(./mod); // 第一次加载mod.js被执行结果被缓存 const mod2 require(./mod); // 第二次加载直接从缓存中拿mod.js不会再执行第1步就是判断缓存这样避免重复加载提升性能。 如果你想我可以帮你写个伪代码模拟这整个流程方便你理解。需要吗 三、require的模块加载机制 关于 Node.js 里的 require它是用来加载模块的背后有一套比较复杂的模块加载机制。下面我详细解释一下 require 的模块加载机制。 Node.js require 模块加载机制详解 1. 作用 require 用来加载和使用模块它可以加载 核心模块如 fs、path 文件模块本地文件JS、JSON、Node 原生支持的其他文件 第三方模块node_modules 里的包 2. 加载流程 当执行 require(some-module) 时Node 会经历如下步骤来找到并加载模块 2.1 判断模块类型 核心模块Core Modules 例如 fs、http、path 等如果是核心模块直接返回核心模块导出的对象不访问文件系统。 文件路径 如果参数是相对路径或绝对路径./foo、../bar、/abs/path则加载指定路径的文件。 第三方模块 如果不是核心模块也不是路径Node 会从当前目录开始向上查找 node_modules 目录直到根目录。 2.2 路径解析文件模块 第三方模块 如果传入的是文件路径相对或绝对Node 会按照下面顺序查找文件 直接看路径对应的文件是否存在比如 ./foo.js 如果路径是文件夹Node 会尝试加载文件夹下的 package.json 里 main 字段指向的入口文件 如果没找到 package.json 或 main尝试加载文件夹下的 index.js 或 index.json 等默认文件 对第三方模块Node 会依次向上查找最近的 node_modules 文件夹里的对应模块文件夹。 2.3 模块缓存 缓存机制当一个模块第一次被加载后会被缓存后续 require 同一模块时直接返回缓存避免重复执行提高效率。 缓存存储在 require.cache 对象里键是模块的绝对路径。 2.4 模块包装和执行 Node 会给每个模块包装一层函数形成闭包。模块代码被包裹成如下形式 (function (exports, require, module, __filename, __dirname) {// 模块代码在这里执行 });这样模块内部就可以使用 exports 导出接口require 加载其他模块module 表示当前模块等。 模块执行时Node 会传入这些参数让模块成为一个私有作用域。 2.5 模块导出机制 模块通过 exports 或 module.exports 导出内容。 exports 是 module.exports 的引用直接修改 exports 不改变导出对象赋值新对象要用 module.exports ... 3. 额外说明 .js 文件被视作 JavaScript 脚本执行。 .json 文件会被自动解析成对象。 .node 文件是编译后的二进制 addon会被加载执行。 总结 判断模块类型核心模块文件模块第三方模块 解析模块路径寻找文件或目录 加载模块读取代码封装成函数 执行模块代码提供闭包参数 缓存模块导出结果 返回模块导出 如果你需要我可以帮你写一个示例演示 require 的缓存或者自定义模块加载过程或者给你推荐一些原理文档。你需要吗 四、require 的缓存机制演示 我先给你演示一下 Node.js 中 require 的缓存机制和自定义模块加载过程然后给你推荐一些深入理解 Node.js 模块加载机制的官方文档和源码相关资料。 1. require 的缓存机制演示 Node.js 中当你用 require(module) 加载模块时模块只会被加载执行一次后续再 require 相同模块直接从缓存拿不会重新执行。 // mod.js console.log(mod.js 执行了); module.exports { count: 0 };// main.js const mod1 require(./mod); mod1.count; console.log(第一次载入:, mod1.count);const mod2 require(./mod); console.log(第二次载入:, mod2.count);// 输出: // mod.js 执行了 // 第一次载入: 1 // 第二次载入: 1解释 第一次 require(./mod)文件执行导出对象缓存起来。 第二次 require(./mod)直接从缓存拿没有再执行 mod.js 文件。 mod1 和 mod2 是同一个对象count 的状态被共享。 2. 自定义模块加载过程简单示例 你可以在 Node.js 中自定义如何加载模块利用 Module._load 或者实现自定义的 require 函数常用场景是修改模块行为或加载非 .js 文件。 以下示例是简单拦截 require 加载过程打印模块名 const Module require(module); const originalLoad Module._load;Module._load function(request, parent, isMain) {console.log(加载模块: ${request});return originalLoad.apply(this, arguments); };const fs require(fs); // 会打印加载模块: fs const path require(path); // 会打印加载模块: path const mymod require(./mod); // 会打印加载模块: ./mod这个示例中改写了内部的 _load 方法实现了加载日志。 3. 推荐学习资源和官方文档 Node.js 模块官方文档英文 详尽解释 CommonJS 模块加载流程缓存机制加载路径解析等。 Node.js 源码中的 Module 模块 Node.js 模块加载器核心源码理解底层机制非常关键。 《深入浅出Node.js》朴灵 书中对模块机制有详细介绍通俗易懂。 Module._load 源码注释文章中文 分析了 _load 方法的实现原理。 如果你需要我还可以帮你写一个更复杂的自定义 require 例子比如加载 JSON、文本文件或者给模块加缓存时间限制之类的。你想看吗
http://www.w-s-a.com/news/801236/

相关文章:

  • 网站根 html网站建设行业数据
  • 网站公司做的网站有最字设计说明室内设计
  • 在线网站代码生成我想做个百度网站怎么做
  • 网站的建设费用分为长治市建设厅官方网站
  • 做网站都有哪些费用建设免费手机网站
  • 网站 组成代码做网站图片怎么插
  • 2020中国企业500强榜单南宁seo标准
  • 北美购物网站排名烟台专业的网站建站公司
  • 门户网站设计特点营销策划咨询机构
  • 天津做网站就到徽信xiala5中国营销型网站
  • 外汇网站建设制作深圳三站合一网站建设
  • 深圳坂田网站设计公司有哪些学校网站建设管理办法
  • 太原建设银行网站中山营销型网站设计
  • 广东省建设厅官方网站多少钱江苏省江建集团有限公司建设网站
  • 网站开发主流服装网站开发课程设计
  • 在iis里面创建网站wordpress响应式视频
  • 学设计哪个网站好网页设计音乐网站
  • 可以自己做斗图的网站上海模板建站多少钱
  • 山东川畅信息技术有限公司网站建设网站开发任务书
  • 网站排版设计欣赏搭建公司介绍网站
  • 网站弹窗是怎么做的长沙智优营家
  • 手机网站菜单设计模板菜单网站图片素材
  • 浙江网站推广爱企查企业查询入口
  • 公司网站平台vs2012网站开发课程设计
  • 哪些方法可以建设网站做网站失败
  • 龙岗网站建设技术wordpress左右两栏
  • 电子商务网站开发与应用的介绍怎么查询域名是否备案
  • 想做一个自己设计公司的网站怎么做的权威发布型舆情回应
  • 做ppt用的音效网站python基础教程网易
  • 可以做免费广告的网站有哪些做视频赚钱的国外网站