关注另一个 question ,我知道我正面临一个 module caching caveat issue .显然,在我的项目中创建了同一个模块的多个实例。
我需要来自位于不同文件夹中的其他模块的模块:
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 中声明单例的正确方法是什么?以及如何在其他模块中检索实例?
最佳答案
这是一个 Windows 问题:Windows 中的文件路径不区分大小写,因此 ./File.txt
和 ./file.txt
指的是同一个文件。问题是,该 Node 不知道这一点,并使用已解析的文件路径作为缓存键,因此可以使用不同的大小写多次加载同一模块。
有关该问题和讨论的更多信息:https://github.com/joyent/node/issues/6000
解决方案(某种):不要在 Node 项目中的文件和目录名称中使用大写
关于javascript - 如何解决 node.js 中的模块缓存警告(单例问题)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24126871/