首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何解决node.js (单例问题)中的模块缓存警告?

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

Stack Overflow用户
提问于 2014-06-09 18:49:28
回答 2查看 439关注 0票数 1

继另一个问题之后,我知道我正面临着一个模块缓存警告问题。显然,在我的项目中创建了相同模块的几个实例。

我要求模块来自位于不同文件夹中的其他模块:

代码语言:javascript
运行
复制
var mm = require("./myModule.js");
...

var mm = require("../myDir/myModule.js");
...

var mm = require("../../MyDir/myModule.js");
...

我一直试图使用对象创建myModule (单例)的唯一实例,并将其导出:

代码语言:javascript
运行
复制
var myModule = function() {

    if (!(this instanceof myModule)) { return new myModule(); }

    ...

};

...

module.exports = new myModule();

然而,这并不能解决这个问题。在node.js中声明单例的正确方法是什么?以及如何在其他模块中检索实例?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-10 09:41:25

这是Windows的一个问题: Windows中的文件路径不区分大小写,因此./File.txt./file.txt引用同一个文件。问题是,节点没有意识到这一点,并且使用解析的文件路径作为缓存密钥,因此可以使用不同的大小写多次加载相同的模块。

关于这个问题和讨论的更多信息:https://github.com/joyent/node/issues/6000

解决方案(某种):不要在节点项目中的文件和目录名称中使用大写

票数 3
EN

Stack Overflow用户

发布于 2014-06-09 22:56:36

这种模式绝对适用于单身人士。

代码语言:javascript
运行
复制
// 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)

肯定有足够一致的输出。

代码语言:javascript
运行
复制
0.7851003650575876
0.7851003650575876
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24126871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档