nodejs 路径解析顺序
前言
在nodejs中引入各个模块包是基于require机制来的,那么nodejs解析这些模块路径顺序是怎样的?
相对路径解析顺序
假设有一个文件路径为/root/src/moduleA.js,包含了一个导入var x = require(“./moduleB”);,也就是导入了一个相对路径的一个模块,那么Node.js以下面的顺序解析这个导入:
- 到
/root/src/moduleB.js 这个路径是否存在,如果不存在进入下一步。 - 检查/root/src/moduleB目录是否包含一个package.json文件,且package.json文件指定了一个“main”模块,比如,Node.js发现文件/root/src/moduleB/package.json包含了{ “main”: “lib/mainModule.js” }, 那么nodejs就会去/root/src/moduleB/lib/mainModule.js。
- 如果没有main字段,nodeJS会检查/root/src/moduleB目录是否包含一个index.js文件,这个文件会被隐世的当做那个文件夹下的“main“模块。
绝对路径解析顺序
假设有一个文件路径为/root/src/moduleA.js,里面包含了一个导入var x = require(‘moduleB’);,也就是绝对路径的一个模块,那么NodeJs以下面的顺序解析这个导入:
- /root/src/node_modules/moduleB.js
- /root/src/node_modules/moduleB/package.json (里面指定了main字段,跟上面相对路径是一样的)
- /root/src/node_modules/moduleB/index.js
如果上面三个没有找到,往上一级目录寻找:
- /root/node_modules/moduleB.js
- /root/node_modules/moduleB/package.json
- /root/node_modules/moduleB/index.js
如果还没有找到,继续往上一级找:
- /node_modules/moduleB.js
- /node_modules/moduleB/package.json
- /node_modules/moduleB/index.js