nodejs模块加载机制

nodejs通过require加载模块,require里面分为相对路径和非相对路径,不同的表示方法,node的寻找机制是不同的。本文翻译自

相对路径

相对路径时,node是直接查找的,如:在/root/src/moduleA.js下,我们要依赖模块var var x = require("./moduleB");nodejs通过以下步骤找到模块。

  1. 作为文件找/root/src/moduleB.js如果存在
  2. 作为目录找/root/src/moduleB,如果目录包含package.json并且标明了main。如在/root/src/moduleB/package.json中包含{ "main": "lib/mainModule.js" },则其找寻/root/src/moduleB/lib/mainModule.js
  3. 做为目录如果在/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:

  1. /root/src/node_modules/moduleB.js

  2. /root/src/node_modules/moduleB/package.json
    (if it specifies a "main"
    property)

  3. /root/src/node_modules/moduleB/index.js

  4. /root/node_modules/moduleB.js

  5. /root/node_modules/moduleB/package.json
    (if it specifies a "main"
    property)

  6. /root/node_modules/moduleB/index.js

  7. /node_modules/moduleB.js

  8. /node_modules/moduleB/package.json
    (if it specifies a "main"
    property)

  9. /node_modules/moduleB/index.js

你可能感兴趣的:(nodejs模块加载机制)