我试图弄清楚node中常见的js模块是如何加载和解析的。决定特定执行顺序和缓存的算法和逻辑是什么?
例如,以下是三个模块:
单元一:
const obj = require("./data_two.js");
require("./data_three.js");
obj.age = 44;
单元二:
module.exports = {
name: "Peter",
surname: "Smith",
};
单元三:
const obj = require("./data_two.js");
console.log(obj);
现在,模块一由节点执行,输出如下:
{ name: 'Peter', surname: 'Smith' }
为什么没有将财产年限添加到输出中?有没有人能解释一下,或者告诉我一些有用的资源,以便我能够掌握幕后的逻辑?
我在网上搜索了一个深刻的解释,但什么也没找到。。。
1条答案
按热度按时间2jcobegt1#
每个模块都有自己的范围。在您的示例中的模块三中
const obj
隐藏const obj
在需要它的模块中。“toobz”中有很多关于这个模块加载过程的合理解释。这里只有一个。
有两件事需要知道。
有一个必需的缓存。因此,require中提到的每个模块只加载一次,即使在代码的各个部分的require操作中多次提到它。
每个模块都由require实现 Package 成这样。
那么,范围是什么?
const obj
是模块的本地,而不是包含需求的范围的本地。如果您习惯于像php这样的语言,其中require操作基本上是从模块中剪切代码并将其粘贴到require的位置,那么这可能会令人困惑。