一尘不染

在node.js中“需要”后如何删除模块?

node.js

假设我需要一个模块并执行以下操作:

var b = require('./b.js');
--- do something with b ---

然后,我要拿走模块b(即清理缓存)。我该怎么办?

原因是我想动态加载/删除或更新模块,而无需重新启动节点服务器。任何想法?

-------更多--------根据删除require.cache的建议,它仍然不起作用…

what I did are few things:
1) delete require.cache[require.resolve('./b.js')];
2) loop for every require.cache's children and remove any child who is b.js
3) delete b

但是,当我呼叫b时,它仍然存在!它仍然可以访问。除非我这样做:

b = {};

不知道这是否是处理该问题的好方法。因为如果以后再修改b.js,我又需要(’./b.js’)。它需要旧的缓存b.js(我尝试删除)还是新的?

-----------更多发现--------------

好。我进行了更多的测试,并尝试了代码。.这是我发现的:

1) delete require.cache[]  is essential.  Only if it is deleted, 
 then the next time I load a new b.js will take effect.
2) looping through require.cache[] and delete any entry in the 
 children with the full filename of b.js doesn't take any effect.  i.e.
u can delete or leave it.  However, I'm unsure if there is any side
effect.  I think it is a good idea to keep it clean and delete it if
there is no performance impact.
3) of course, assign b={} doesn't really necessary, but i think it is 
 useful to also keep it clean.

阅读 287

收藏
2020-07-07

共1个答案

一尘不染

您可以使用此命令在缓存中删除其条目:

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

require.resolve()将找出的完整路径./b.js,该路径用作缓存键。

2020-07-07