如果我将一个对象附加到节点中的module.exports
对象,如下所示:
module.exports = new Object()
我的应用程序中的每个object = require('./Object')
都会创建该对象的新实例,还是会创建对该实例的引用?
答案 0 :(得分:9)
require()
缓存它执行的文件。
第一次require('./Object')
时,它会运行您的代码并将导出的对象放在require.cache
中。
后续调用将立即返回缓存对象。
您可以自己从缓存中删除模块,或使用getter,但这些都是不好的想法。
答案 1 :(得分:1)
在节点文档中查看caching caveats。只要已解析的模块路径匹配,您将获得相同的对象。 this answer中有一个解析路径不匹配的例子。