Node.js 模块的加载机制

347 阅读1分钟

1、模块在第一次加载后会被缓存,即多次调用 require() 不会导致模块内代码执行多次,所有模块都会优先从缓存加载以提高效率

2、内置模块的加载优先级最高,如 require('fs') 始终返回内置的 fs 模块,即使在 node_modules 目录下有同名包

3、使用 require() 加载自定义模块,必须以 ./ ../ 路径标识符开头,若没有指定 node 会将其当作内置模块或第三方模块

4、若使用 require() 导入时省略文件扩展名,会按顺序依次尝试:按确切文件名加载、补全 .js 加载、补全 .json 加载、补全 .node 加载、报错

5、如果传给 require() 的模块标识符不是一个内置模块,也没有以路径标识符开头,则会从当前模块的父目录开始,尝试从 node_modules 文件中加载第三方模块,如果没有找到则移动到再上一层父目录中进行加载,直到文件系统的根目录

6、使用 require() 加载自定义模块时,如果只给了一个文件名,会尝试找到 package.json 中的 main 指向的路径,若没有则会尝试找到 index.js