Node中require函数的查找规则

305 阅读1分钟

在nodejs中我们通过require(X),可以引入一个模块中导出的对象。

那么,require的查找规则是怎么样的呢?

导入格式require(X),下面总结几个常见的查找规则:

情况一:X是一个NodeJs核心模块,比如path、http等

直接返回核心模块,并且停止查找。

情况二:X是以./ 或 ../ 或 (根目录) 开头的

第一步:将X当做一个文件在对应的目录下查找;

  1. 如果有后缀名,直接按照后缀名的格式查找对应的文件

  2. 如果没有后缀名,会按照如下的顺序:

    1. 直接查找文件X
    2. 查找X.js文件
    3. 查找X.json文件
    4. 查找X.node文件

第二步:没有对应的文件,将X看作一个目录

  1. 查找目录下面的index文件

    1. 查找X/index.js文件
    2. 查找X/index.json文件
    3. 查找X/index.node文件

如果还没有找到,那么就报错:not found

情况三:X没有路径,也不是一个核心模块

从node_modules目录查找

NodeJs从当前模块的目录开始,并添加/node_modules,并尝试从该位置加载模块

例如,如果在"/home/ry/projects/foo.js"中调用 require(X),则将以下顺序查找:

  • /home/ry/projects/node_mudules
  • /home/ry/node_modules
  • /home/node_modules
  • /node_modules

以上目录找不到,那么就报错:not found