是否在每个需求声明中重复显示模块?

时间:2015-04-23 16:19:13

标签: node.js

例如,假设我们有文件GetWindow(GW_OWNER)

required-module.js

现在假设在var RevealedModule = function()({ var count = 0; var incrementCount = function (){ return count++; } incrementCount(); //sets `count` equal to 1 return { incrementCount: incrementCount } })(); module.exports = RevealedModule; file1.js我们位于顶部

file2.js

问题:

  1. RevealedModule现在有多少个实例?也就是说,是否只有一个实例被所有这些文件同时引用,或者现在有3个单独的实例?

  2. 这些实例中的私有变量var RevealedModule = require('required-module.js'); 现在是否等于count1

2 个答案:

答案 0 :(得分:2)

模块只加载一次。因此,即使您在module.exports中返回自执行函数,它也只会执行一次。

来自文档:https://nodejs.org/api/modules.html#modules_caching

  

模块在第一次加载后进行缓存。这意味着(除其他外)每次调用require(' foo')将获得完全相同的返回对象,如果它将解析为同一文件。

以下是详细描述的完整node.js模块加载器进程:https://nodejs.org/api/modules.html#modules_all_together

答案 1 :(得分:1)

只有一个实例,因此每次需要()时都会得到一个实例。这是一个很好的解释:

http://willi.am/blog/2014/10/12/understanding-nodes-require-function