一、模块的加载机制
模块在第一次加载后会被缓存。这也意味着,多次调用 require 不会导致模块中的代码被执行多次。
不论 node内置模块、用户自定义模块 还是 第三方模块,都会优先从缓存中加载,从而提高模块的加载效率。
二、内置模块的加载机制
内置模块是 node.js 官方提供的模块。三种模块中,内置模块的优先级最高
。
如果第三方模块和内置模块名称一样,会加载内置模块。
三、自定义模块的加载机制
1、必须指定以 ./
或 ../
开头的路径标识符
使用 require 加载自定义模块时,必须指定以 ./
或 ../
开头的路径标识符。
如果没有指定 ./ 或 …/ ,会被当成 内置模块 或者 第三方模块 进行加载。
2、补全扩展名的顺序
如果在使用 require() 导入自定义模块时,省略了文件拓展名,Node.js 会按顺序分别尝试加载以下的文件:
- 按确切的文件名加载;
- 补齐
.js
扩展名加载; - 补齐
.json
扩展名加载; - 补齐
.node
扩展名加载; - 如果都加载失败,则报错
四、第三方模块的加载机制
五、目录作为模块
当把目录作为模块标识符,传递给 require() 加载时,有三种加载方式:
(1)在加载路径下找 package.json
,从中找 main
属性,作为入口文件;
(2)如果没有 package.json 或者 文件中没有 main 属性,则尝试加载路径下的 index.js
;
(3)如果以上两步都失败了,则 Node.js 会在终端打印错误消息,报告模块的缺失:Error: Cannot find module ‘xxx’