如何在node.js中创build单例模块?

我正在尝试创build一个在networking上做一些工作的模块,同时也caching最近的结果,以减less它访问的资源的利用率。 我的想法是创build一个模块,并在需要的时候需要它。 然而,在较旧版本的节点中,这被明确地说是无效的,因为如果parsing到相同的path,只requirecaching它的参数。

随着更新版本的节点在node-modules下创build扁平结构,我认为这不再是事实。 不过,我仍然看到更多的关于单身人士的文章,这些文章主张用不同的方法创build一个单身人士:

如果你想创build一个像单例一样的东西,你通常可以在模块中做这样的事情:

 var HelloWorld = (function () { this.greeting = “Hello, World”; return this; })(); module.exports = HelloWorld; 

这意味着如果你在应用程序中多次加载模块,即使在不同的文件中,HelloWorld也只会被调用一次。 并且HelloWorld的所有实例都将指向同一个对象。

首先,我不明白为什么这是真的:如果你从两个不同的目录加载这个模块,为什么HellowWorld只能被调用一次? 不会从被加载的模块的每个不同实例调用一次吗?

其次,如果使用足够新的使用平面安装结构的npm版本,甚至有必要这样做?