在nodejs中我们通过require(X),可以引入一个模块中导出的对象。
那么,require的查找规则是怎么样的呢?
导入格式require(X),下面总结几个常见的查找规则:
情况一:X是一个NodeJs核心模块,比如path、http等
直接返回核心模块,并且停止查找。
情况二:X是以./ 或 ../ 或 (根目录) 开头的
第一步:将X当做一个文件在对应的目录下查找;
-
如果有后缀名,直接按照后缀名的格式查找对应的文件
-
如果没有后缀名,会按照如下的顺序:
- 直接查找文件X
- 查找X.js文件
- 查找X.json文件
- 查找X.node文件
第二步:没有对应的文件,将X看作一个目录
-
查找目录下面的index文件
- 查找X/index.js文件
- 查找X/index.json文件
- 查找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