javascript - 如何解决 node.js 中的模块缓存警告(单例问题)?

标签 javascript node.js module singleton

关注另一个 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/

相关文章:

javascript - 多条件过滤

node.js - 如何使用对象数组创建 Mongoose 模式

node.js - Node js集群环境下Cron Job多次运行

javascript - 将现有的遗留库转换为 es6 模块

JavaScript : Prevent showing alert when the url being opened is invalid

javascript - 在 FreeMarker 上获取 URL 的 queryString 参数的更好方法

JavaScript 跳过 document.write 转到 window.prompt?

javascript - 如何在不使用 -webkit-app-region 的情况下在 Electron 中移动无框窗口

c++ - 嵌入式 Lua C++ : how can i load multiple lua modules from C++ side

Ruby::test/unit - 如何动态地将测试插入到测试用例的中间?