Node.js模块加载机制

模块加载机制

1、模块优先从缓存中进行加载

模块在第一次加载后会被缓存, 如果每次调用 require(‘foo’) 都解析到同一文件,则返回相同的对象,不会导致模块的代码被执行多次

2、内置模块的加载机制

require() 总是会优先加载核心模块, 比如 require(‘http’) 始终返回内置的 HTTP 模块,即使有同名文件

3、自定义模块的加载机制

​ 使用 require() 方法去加载自定义模块,必须指定 ‘/‘、 ‘./‘ 或 ‘../‘ 开头的路径,如果没有这个路径标识,node 会默认把它当作是一个核心模块或来自 node_modules 目录下的第三方模块

  • 自定义文件模块

    如果按确切的文件名没有找到模块,则 Node.js 会尝试带上 .js、 .json 或 .node 拓展名再加载

  • 自定义目录模块

    当传递一个目录标识符给 require () 方法时, 加载的顺序如下:

  1. 在加载的目录下查找 package.json 的文件, 并寻找 main 属性作为 require 的入口

  2. 上述找不到, Node.js 将会试图加载目录下的 index.js 或 index.node 文件

4、第三方模块的加载机制

 如果传递给 require() 的模块标识符不是一个核心模块,也没有以 '/' 、 '../' 或 './' 开头,

​ 那么 Node.js 会从当前模块的父目录开始,尝试从它的 /node_modules 目录里加载模块。如果还是没有找到,

​ 则移动到再上一层父目录,直到文件系统的根目录。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!