一、模块的加载机制
模块在第一次加载后会被缓存。这也意味着,多次调用 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’
版权声明:本文为weixin_41294419原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。