我无法理解节点的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
为不同的文件描述符返回相同的文件?
编辑:以下示例的工作原理也让我大吃一惊(使用相同的文件结构):
// 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
都与源代码的文件路径信息绑定在一起。这是对的吗?
这有什么用?
答案 0 :(得分:0)
源代码中每次出现的require都与源代码的文件路径信息绑定
是的,这完全正确。更确切地说,根据docs:
要求(X)来自路径Y的模块
- 醇>
如果X以' ./'开头;或者' /'或' ../ 39;
一个。 LOAD_AS_FILE(Y + X)
即。它将当前文件的路径与require
d。