我正在尝试创建一个小型网络应用,我对module.exports有疑问
假设我有一个文件counter.js
var counter = 0;
module.exports = {
add: function() {
counter++;
},
get: function() {
return counter;
}
}
我尝试在几个文件中引用此文件,假设app.js
和count.js
都位于同一目录中
// from app.js
var a = require('./counter.js');
a.add();
console.log(a.get()); // the value is 1
// from count.js
var b = require('./counter.js');
b.add();
console.log(b.get()); // the value is 2?
值是1还是2?
答案 0 :(得分:1)
如果您的意思是(例如)app.js
将count.js
包括require()
,或app.js
和count.js
将包含在第三个文件中通过require()
,然后他们共享一个实例,答案是2
。
如果您指的是运行node app.js
然后运行node count.js
会发生什么情况,那么在这种情况下,每个文件都会获得所需模块的实例,因此它将是1
答案 1 :(得分:1)
结果将是2
来自 nodejs.org doc
模块在第一次加载后进行缓存。这意味着(除其他外)每次调用require(' foo')将获得完全相同的返回对象,如果它将解析为同一文件。
多次调用require(' foo')可能不会导致模块代码多次执行。这是一个重要的特征。有了它,"部分完成"可以返回对象,从而允许传递依赖性,即使它们会导致循环。