node.js require()缓存-可能无效?

node.js require()缓存-可能无效?,第1张

node.js require()缓存-可能无效?

即使存在循环依赖关系,也始终可以安全地删除require.cache中的条目,而不会出现问题。因为在删除时,您仅删除对缓存的模块对象的引用,而不是对模块对象本身的引用,所以不会对GC对象进行GC,因为在循环依赖的情况下,仍然有一个对象引用此模块对象。

假设您有:

脚本a.js:

var b=require('./b.js').b;exports.a='a from a.js';exports.b=b;

脚本b.js:

var a=require('./a.js').a;exports.b='b from b.js';exports.a=a;

当您这样做时:

var a=require('./a.js')var b=require('./b.js')

你会得到:

> a{ a: 'a from a.js', b: 'b from b.js' }> b{ b: 'b from b.js', a: undefined }

现在,如果您编辑b.js:

var a=require('./a.js').a;exports.b='b from b.js. changed value';exports.a=a;

并做:

delete require.cache[require.resolve('./b.js')]b=require('./b.js')

你会得到:

> a{ a: 'a from a.js', b: 'b from b.js' }> b{ b: 'b from b.js. changed value',  a: 'a from a.js' }

===

如果直接运行node.js,则以上内容有效。但是,如果使用具有自己的模块缓存系统的工具(例如 jest) ,则正确的语句将是:

jest.resetModules();


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5010309.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存