nodejs模块加载机制
优先从缓存中加载
- 当一个模块初次被
require
的时候,会执行模块中的代码,当第二次加载相同模块的时候,会优先从缓存中查找,看有没有这样的一个模块! - 好处:提高模块的加载速度;不需要每次都重新执行并加载模块!
核心模块的加载机制
- 先查找缓存;如果缓存中没有,再去加载核心模块;
用户模块的加载机制
-
先查找缓存;
-
如果缓存中没有则尝试加载用户模块;
-
如果在加载用户模块时候省略了后缀名,则:
首先,严格按照指定的名称去查找 其次,尝试加载后缀名是 .js 的文件 如果没有.js的文件,则尝试加载 .json 结尾的文件 如果没有 .json 的文件,则尝试加载 .node 结尾的文件 查找规则:index -> index.js -> index.json -> index.node
第三方模块的加载机制【了解】
- 先在项目根目录中查找
node_modules
文件夹 - 在
node_modules
文件夹下,查找模块相关的文件夹 - 在对应的文件夹下,查找
package.json
的文件 - 查找
package.json
文件中的main
属性(指定了模块的入口文件) - 如果找到了
main
属性,同时,main
属性指定的文件路径存在,那么尝试加载指定的文件模块 - 加入没有
main
属性,或者main
属性对应的文件不存在,或者没有package.json
,那么会依次尝试加载index.js
,index.json
,index.node
; - 如果没有
index
相关的文件,或者没有指定模块对应文件夹,或者,当前项目根目录中没有node_modules
文件夹,则向上一层目录中查找node_modules
,查找规则同上! - 最后,如果在项目所在磁盘的盘符根目录中,还找不到对应模块,则报错:
cannot find module ***