通常,在Node.js里导入是通过 require函数调用进行的。 Node.js会根据 require的是相对路径还是非相对路径做出不同的行为。
相对路径很简单。 例如,假设有一个文件路径为 /root/src/moduleA.js,包含了一个导入
var x = require("./moduleB");
Node.js以下面的顺序解析这个导入:
非相对模块名的解析是个完全不同的过程。 Node会在一个特殊的文件夹 node_modules里查找你的模块。 node_modules可能与当前文件在同一级目录下,或者在上层目录里。 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 (如果指定了"main"属性) /root/src/node_modules/moduleB/index.js /root/node_modules/moduleB.js /root/node_modules/moduleB/package.json (如果指定了"main"属性) /root/node_modules/moduleB/index.js /node_modules/moduleB.js /node_modules/moduleB/package.json (如果指定了"main"属性) /node_modules/moduleB/index.js 注意Node.js在步骤(4)和(7)会向上跳一级目录。