【发布时间】:2018-02-15 18:47:04
【问题描述】:
我有一个名为 counter 的自定义模块,它被多个其他模块使用。这些其他模块位于不同的目录中,这导致需要具有不同路径的 counter 模块。
下面是简化的设置。
- dir1
-- counter.js
-- module1.js
- dir2
-- module2.js
counter.js
var count = 0;
counter.increment = function(){
count++;
console.log(count);
};
module1.js
var counter = require('./counter');
counter.increment(); // Prints 1
module2.js
var counter = require('../dir1/counter')
counter.increment(); // Prints 1, but should print 2
如果使用相同的包含路径,则 counter 只会创建一次,并且 module1 和 module2 将使用相同的 counter 模块。但是因为 require 路径不同,所以创建了两个单独的 counter 模块。
有人知道如何防止这种情况吗?我希望只有一个 counter 模块。
【问题讨论】:
-
因为你想要一个每个应用程序的单例并且
require()无法知道具有两个独立路径的模块实际上是同一个模块,所以我知道这样做的唯一方法(除了删除模块的单独路径)是让您的模块将单例注册为全局,然后在创建另一个单例之前对该单例进行自己的初始化检查。然后,每次加载它时,它只会返回一个指向该单例的导出。
标签: node.js node-modules