继另一个问题之后,我知道我正面临着一个模块缓存警告问题。显然,在我的项目中创建了相同模块的几个实例。
我要求模块来自位于不同文件夹中的其他模块:
var mm = require("./myModule.js");
...
var mm = require("../myDir/myModule.js");
...
var mm = require("../../MyDir/myModule.js");
...我一直试图使用对象创建myModule (单例)的唯一实例,并将其导出:
var myModule = function() {
if (!(this instanceof myModule)) { return new myModule(); }
...
};
...
module.exports = new myModule();然而,这并不能解决这个问题。在node.js中声明单例的正确方法是什么?以及如何在其他模块中检索实例?
发布于 2014-06-10 09:41:25
这是Windows的一个问题: Windows中的文件路径不区分大小写,因此./File.txt和./file.txt引用同一个文件。问题是,节点没有意识到这一点,并且使用解析的文件路径作为缓存密钥,因此可以使用不同的大小写多次加载相同的模块。
关于这个问题和讨论的更多信息:https://github.com/joyent/node/issues/6000
解决方案(某种):不要在节点项目中的文件和目录名称中使用大写
发布于 2014-06-09 22:56:36
这种模式绝对适用于单身人士。
// singleton.js
module.exports = new Singleton
function Singleton () {
this.rand = Math.random()
}
// one.js
var singleton = require('./singleton')
console.log(singleton.rand)
// two.js
require('./one')
var singleton = require('./singleton')
console.log(singleton.rand)肯定有足够一致的输出。
0.7851003650575876
0.7851003650575876https://stackoverflow.com/questions/24126871
复制相似问题