Node.js 模块.导出和局部变量

Node.js 模块.导出和局部变量,node.js,Node.js,我正在尝试创建一个小型web应用程序,我对module.exports有一个问题 支持我有一个文件counter.js var counter = 0; module.exports = { add: function() { counter++; }, get: function() { return counter; } } 我尝试在几个文件中引用这个文件,假设app.js和count.js都位于同一个目录中 // fro

我正在尝试创建一个小型web应用程序,我对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

如果您的意思是(例如)
app.js
将通过
require()
包含
count.js
,或者
app.js
count.js
都将通过
require()
包含在第三个文件中,那么它们都共享一个实例,答案是
2

如果您的意思是运行
node app.js
然后运行
node count.js
,那么在这种情况下,每个文件都会获得它自己的所需模块实例,因此它将是
1

,如果您的意思是(例如)
app.js
将通过
require()包含
count.js
或者
app.js
count.js
都将通过
require()
包含在第三个文件中,那么它们都共享一个实例,答案是
2

如果您的意思是运行
node app.js
然后运行
node count.js
,那么在这种情况下,每个文件都会获得所需模块的自身实例,因此它将是
1
,结果将是2

nodejs.orgdoc

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

多次调用require('foo')可能不会导致多次执行模块代码。这是一个重要特征。使用它,可以返回“部分完成”的对象,从而允许加载可传递的依赖项,即使它们会导致循环。

结果将是2

nodejs.orgdoc

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


多次调用require('foo')可能不会导致多次执行模块代码。这是一个重要特征。使用它,可以返回“部分完成”的对象,从而允许加载可传递的依赖项,即使它们会导致循环。

有没有办法让变量计数器由两个文件共享?我的意思是
app.js
count.js
是两个独立的文件,包括
counter.js
通过
require()
有没有办法让变量计数器由两个文件共享?我的意思是
app.js
count.js
是两个独立的文件,包括
counter.js
通过
require()