Node中模块查找机制


文章目录

      • 模块查询遵从以下机制
        • 1.优先从缓存中加载
        • 2.加载顺序
        • 3.加载优先级
【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

    推荐阅读