nodejs通过require加载模块,require里面分为相对路径和非相对路径,不同的表示方法,node的寻找机制是不同的。本文翻译自
相对路径
相对路径时,node是直接查找的,如:在/root/src/moduleA.js下,我们要依赖模块var var x = require("./moduleB");nodejs通过以下步骤找到模块。
- 作为文件找/root/src/moduleB.js如果存在
- 作为目录找/root/src/moduleB,如果目录包含package.json并且标明了main。如在/root/src/moduleB/package.json中包含{ "main": "lib/mainModule.js" },则其找寻/root/src/moduleB/lib/mainModule.js
- 做为目录如果在/root/src/moduleB下有index.js则加载/root/src/moduleB/index.js。
具体详情可以查看nodejs文件加载机制
注意:当以‘/’开头加载的时候是文件的绝对路径。如require('/home/marco/foo.js')
将加载 /home/marco/foo.js
非相对路径
对于非相对的模块导入,node将会在node_modules中找,如在/root/src/moduleA.js中我们依赖模块var x = require("moduleB");node将会通过下面步骤找寻moduleB:
/root/src/node_modules/moduleB.js
/root/src/node_modules/moduleB/package.json
(if it specifies a "main"
property)/root/src/node_modules/moduleB/index.js
/root/node_modules/moduleB.js
/root/node_modules/moduleB/package.json
(if it specifies a "main"
property)/root/node_modules/moduleB/index.js
/node_modules/moduleB.js
/node_modules/moduleB/package.json
(if it specifies a "main"
property)/node_modules/moduleB/index.js