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

接下来的另一个问题 ,我明白我面临一个模块caching警告问题 。 很明显,我的项目中创build了几个相同模块的实例。

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

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

我一直在尝试使用一个对象创build一个myModule (singleton)的独特实例并导出它:

 var myModule = function() { if (!(this instanceof myModule)) { return new myModule(); } ... }; ... module.exports = new myModule(); 

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

这是一个Windows问题:Windows中的文件path不区分大小写,所以./File.txt./file.txt引用同一个文件。 问题是,该节点没有意识到这一点,并使用parsing的文件path作为caching键,所以可以使用不同的shell多次加载相同的模块。

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

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

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

 // 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.7851003650575876