关注「前端向后」微信公众号,你将收获一系列「用心原创」的高质量技术文章,主题包括但不限于前端、Node.js以及服务端技术
一.模块类型
Node.js 默认支持 2 种模块:
核心模块(Core Modules):编译成二进制,其源码位于lib/目录下
文件模块(File Modules):包括 JavaScript 文件(
.js
)、JSON 文件(.json
)、C++扩展文件(.node
)
由易到难,先看最常打交道的 JS 模块
二.JS 模块
js module
注意一个细节,是在加载&执行模块文件前会先缓存module
实例,而不是之后才缓存,这是Node.js 能够从容应对循环依赖的根本原因:
When there are circular require() calls, a module might not have finished executing when it is returned.
如果模块加载过程中出现了循环引用,导致尚未加载完成的模块被引用到,按照图示的模块加载流程也会命中缓存(而不至于进入死递归),即便此时的module.exports
可能不完整(模块代码没执行完,有些东西还没挂上去)
P.S.关于如何根据模块标识找到对应模块(入口)文件的绝对路径,同名模块加载优先级,以及相关 Node.js 源码的解读,见详解Node 模块加载机制
三.JSON 模块
类似于 JS 模块,JSON 文件也可以作为模块直接通过require
加载,具体流程如下:
json module