文章目录
- 模块查询遵从以下机制
- 1.优先从缓存中加载
- 2.加载顺序
- 3.加载优先级
模块查询遵从以下机制
1.优先从缓存中加载 main.js文件需要引入模块a和模块b中导出的数据
//main.js文件
let a = require('./a');
let b = require('./b');
//*
a.js文件需要引入模块b中导出的数据
//a.js文件
let b = require('./b');
那么当main在加载a的时候,a中加载了b,所以在
*
的位置时,b模块已经存入缓存,不需要再重新去加载了。node会缓存编译执行后的对象。
2.加载顺序 2.1
核心模块
是node封装完成的,暂不讨论2.2
路径形式模块
按照路径进行查找加载2.3
第三方模块
遵循以下顺序- 先在同级查找
node_modules
文件夹 - 如果同级目录当中有
node_modules
文件夹,那么就在node_modules
里面找其引入时的命名
,找到其命名的文件夹后,再进入此文件夹中寻找package.js
文件里的main
,一般main
会指向入口文件index.js
(通常都是叫index.js) - 如果同级目录下没有
node_modules
文件夹,那么会在上一级目录中寻找,如果找到就按照第二步执行,如果没有再往上上级找。
package.js
文件里的main
对应的入口文件找不到,则会默认加载名为index.js的文件。加载方式类似于原型链,如果对于原型链不是很了解,请查看以下博文
prototype,proto,constructor到底是什么关系(图解)
3.加载优先级 1.先从缓存中检查
在缓存中 :核心模块优先级 > 文件模块优先级
2.检查完缓存后检测核心模块
由于核心模块已经编译进了二进制文件,故加载速度最快
3.当核心模块中没有要加载的模块时
进行第三方模块加载步骤,具体步骤查看上面2.3
推荐阅读
- vue.js|vue中使用axios封装成request使用
- vue|电商后台管理系统(vue+python|node.js)
- node 与 ts-node
- 后端工作笔记
- 关于项目中 Repository 层的思考
- Egg框架应用Sequelize操作MySQL小结
- node之请求管理器
- JS|Swiper插件的简单使用
- js|Node 微信支付 “由于商家传入的H5交易参数有误 该笔交易暂时无法完成 请联系商家解决”
- JavaWeb|电商后台管理系统项目后台项目的环境安装及配置