Javascript Nodejs:跨多个文件的全局变量

Javascript Nodejs:跨多个文件的全局变量,javascript,node.js,singleton,Javascript,Node.js,Singleton,我已经为我的节点服务器跨多个文件编写了代码 如果我有文件,请说basket.js: var Basket = { fruits : 0, addFruit : function() { fruits++; }, removeFruit : function() { fruits--; }, printFruit : function() { console.log(this.fruits

我已经为我的节点服务器跨多个文件编写了代码

如果我有文件,请说basket.js:

var Basket = {
    fruits : 0,
    
    addFruit : function() {
        fruits++;
    },

    removeFruit : function() {
        fruits--;
    },

    printFruit : function() {
        console.log(this.fruits);
    }
}
module.export = Basket;
我还有另一个名为give.js的文件:

var Basket1 = require("./basket.js");

Basket1.addFruit();
Basket1.printFruit();
和另一个名为take.js的文件:

var Basket2 = require("./basket.js");

Basket2.removeFruit();
Basket2.printFruit();
这两个文件会写入同一个Basket实例吗? 换句话说,他们是否都能控制财产、水果? 节点是否自行管理竞争条件?i、 e.如果add和sub同时发出两个修改水果的命令,节点是否知道如何处理


如果我想让两个文件可以同时查看一个单例并访问它,这是一种方式吗??或者是怎样做的?

是的,他们将访问同一个对象

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


否,节点不会自行管理竞争条件,因为竞争条件不会由节点本身引起。节点是单线程的,因此任何代码都不能与其他代码同时执行。请参阅示例以获得更多解释。

我是一名初学者,但我认为正确的语法是
模块。导出
而不是
模块。导出
-如果您可以更正,以便人们不会奇怪为什么它不能像我刚才那样工作:)

当您尝试它时会发生什么?当我尝试上述代码时,它不起作用。。。每次运行removeFruit或printFruit时,它都会创建一个新的Basket实例……您可能想看看这个。