Node中模块查找机制

模块查询遵从以下机制

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第三方模块遵循以下顺序

  1. 先在同级查找node_modules文件夹
  2. 如果同级目录当中有node_modules文件夹,那么就在node_modules里面找其引入时的命名,找到其命名的文件夹后,再进入此文件夹中寻找package.js文件里的main,一般main会指向入口文件index.js(通常都是叫index.js)
  3. 如果同级目录下没有node_modules文件夹,那么会在上一级目录中寻找,如果找到就按照第二步执行,如果没有再往上上级找。

上面需要注意的是,如果package.js文件里的main对应的入口文件找不到,则会默认加载名为index.js的文件。

加载方式类似于原型链,如果对于原型链不是很了解,请查看以下博文
prototype,proto,constructor到底是什么关系(图解)

3.加载优先级

1.先从缓存中检查
在缓存中 :核心模块优先级 > 文件模块优先级
2.检查完缓存后检测核心模块
由于核心模块已经编译进了二进制文件,故加载速度最快
3.当核心模块中没有要加载的模块时
进行第三方模块加载步骤,具体步骤查看上面2.3

发布了30 篇原创文章 · 获赞 6 · 访问量 4718

猜你喜欢

转载自blog.csdn.net/EcbJS/article/details/105478505
今日推荐