javascript - 是否为每个需求创建了一个 node.js 模块实例?

标签 javascript node.js module

我正在尝试解决 node.js 应用程序中的错误。

在名为 mmm 的模块中,我有一个名为 xxx 的局部变量(未导出),它被设置为 false。有一个名为 enableXXX() 的导出函数,它将变量设置为 true。另一个模块 nnn 需要 mmm 并调用 enableXXX()

其他模块需要mmm,但是好像没有调用enableXXX()。它的行为就好像 xxx 仍然是 false

这是否意味着每个都需要创建一个单独的模块实例?

更新

我发现这是一个错误的大写字母:

// Module A
var XXX = require("./myDir/xxx.js");
...

// Module B
var XXX = require("./mydir/xxx.js");
...

最佳答案

不,它没有。让我们做一个实验:

mmm.js:

var xxx = false;

exports.enableXXX = function() {
    xxx = true;
}

exports.isEnabled = function() {
    return xxx;
}

nnn.js:

require('./mmm').enableXXX();

ma​​in.js:

require('./nnn');

console.log('The result is: ' + require('./mmm').isEnabled());

现在让我们运行 main.js:

$ node main.js
The result is: true

这是来自 the official docs 的解释:

  • 模块在第一次加载后被缓存。这意味着(除其他事项外)每次调用 require('foo') 都会得到返回的完全相同的对象,如果它解析为相同的文件的话。

关于javascript - 是否为每个需求创建了一个 node.js 模块实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24125459/

相关文章:

module - 我什么时候需要三重斜杠引用?

javascript - 将三个组件变成两个组件

CGI 中的 Javascript 显示错误

JavaScript - 通过计数查找对象数组中的唯一值并创建新的对象数组

node.js - Node 中第一次调用函数的时间

node.js - 意外的代币 * Koa.js

javascript - Extjs 面板。键盘事件

node.js - Sailsjs 模块

python - 打印模块版本而不导入整个包

php - 在哪里保存多个 ZF2 模块中使用的类?