node.js require 方法如何解释相对路径?
How does node.js require method interpret relative paths?
我无法理解节点的 require
方法如何解析相对路径。
假设我有这样的文件结构:
root
|--- main.js
|
|--- importantUtilities.js
|
|--- apps
|
|--- app1.js
如果 /root/main.js
和 /root/apps/app1.js
都需要 /root/importantUtilities.js
,它们对 require
函数的参数化不同:
// File: /root/main.js
...
require('./importantUtilities.js');
...
// File: /root/apps/app1.js:
...
require('../importantUtilities.js');
...
不需要在前面添加 __dirname
,如果没有这条信息,我看不出 require
是如何工作的。
如何require
实现不同文件描述符的return同一个文件?
编辑:以下示例有效的事实也让我大吃一惊(使用相同的文件结构):
// File: /root/main.js:
...
module.exports.getUtilities = function() { return require('./importantUtilities.js'); };
var utilities = module.exports.getUtilities(); // Works fine
...
// File: /root/apps/app1.js:
...
var main = require('../main.js');
var utilities = main.getUtilities(); // Works fine
...
似乎 require
甚至没有从调用范围确定基本路径;更重要的是,源代码中每次出现的 require
都与源代码的文件路径信息绑定在一起。这是正确的吗?
这是如何工作的?
every occurrence of require in the source code is bound with the source code's filepath information
是的,完全正确。更精确,根据 docs:
require(X) from module at path Y
If X begins with './' or '/' or '../'
a. LOAD_AS_FILE(Y + X)
即它将当前文件的路径与 require
d.
的路径连接起来
我无法理解节点的 require
方法如何解析相对路径。
假设我有这样的文件结构:
root
|--- main.js
|
|--- importantUtilities.js
|
|--- apps
|
|--- app1.js
如果 /root/main.js
和 /root/apps/app1.js
都需要 /root/importantUtilities.js
,它们对 require
函数的参数化不同:
// File: /root/main.js
...
require('./importantUtilities.js');
...
// File: /root/apps/app1.js:
...
require('../importantUtilities.js');
...
不需要在前面添加 __dirname
,如果没有这条信息,我看不出 require
是如何工作的。
如何require
实现不同文件描述符的return同一个文件?
编辑:以下示例有效的事实也让我大吃一惊(使用相同的文件结构):
// File: /root/main.js:
...
module.exports.getUtilities = function() { return require('./importantUtilities.js'); };
var utilities = module.exports.getUtilities(); // Works fine
...
// File: /root/apps/app1.js:
...
var main = require('../main.js');
var utilities = main.getUtilities(); // Works fine
...
似乎 require
甚至没有从调用范围确定基本路径;更重要的是,源代码中每次出现的 require
都与源代码的文件路径信息绑定在一起。这是正确的吗?
这是如何工作的?
every occurrence of require in the source code is bound with the source code's filepath information
是的,完全正确。更精确,根据 docs:
require(X) from module at path Y
If X begins with './' or '/' or '../'
a. LOAD_AS_FILE(Y + X)
即它将当前文件的路径与 require
d.