我有一个相关问题有关模块缓存的 Node.js 文档 http://nodejs.org/docs/latest/api/modules.html#caching:
模块在第一次加载后会被缓存。这意味着
(除其他外)每次调用 require('foo') 都会得到完全相同的物体返回,如果它会解决相同的问题
文件。
多次调用 require('foo')可能不会导致模块代码为
执行多次。这是一个重要的特征。用它,
可以返回“部分完成”的对象,从而允许传递
即使依赖项会导致循环,也要加载依赖项。
是什么意思may
?
我想知道是否需要always返回相同的对象。所以如果我需要一个模块A in app.js
并更改内的导出对象app.js
(需要返回的那个)然后需要一个模块B in app.js
它本身需要模块A,我会吗always获取该对象的修改版本,还是一个新版本?
// app.js
var a = require('./a');
a.b = 2;
console.log(a.b); //2
var b = require('./b');
console.log(b.b); //2
// a.js
exports.a = 1;
// b.js
module.exports = require('./a');
If both app.js
and b.js
reside 在同一个项目中(并且在同一目录中)那么他们都会收到同一个实例 of A
。来自Node.js 文档 http://nodejs.org/docs/latest/api/modules.html#modules_caching:
...每次致电require('foo')
将会得到完全相同的物体返回,如果可以解决到同一个文件.
当情况有所不同时a.js
, b.js
and app.js
are in 不同的 npm 模块。例如:
[APP] --> [A], [B]
[B] --> [A]
在这种情况下require('a')
in app.js
将解析为不同的副本a.js
than require('a')
in b.js
因此返回一个不同的实例 of A
。有一个博客文章 http://justjs.com/posts/singletons-in-node-js-modules-cannot-be-trusted-or-why-you-can-t-just-do-var-foo-require-baz-init更详细地描述此行为。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)