了解 Node.js 模块:多个要求返回相同的对象?

2024-03-25

我有一个相关问题有关模块缓存的 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(使用前将#替换为@)

了解 Node.js 模块:多个要求返回相同的对象? 的相关文章

随机推荐