在我需要一个模块并执行以下操作后,请说:
var b = require('./b.js');
--- do something with b ---
Run Code Online (Sandbox Code Playgroud)
然后我想拿掉模块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
Run Code Online (Sandbox Code Playgroud)
但是,当我打电话给b时,它仍然存在!它仍然可以访问.除非我这样做:
b = {};
Run Code Online (Sandbox Code Playgroud)
不确定它是否是处理它的好方法.因为如果以后再次要求('./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 …Run Code Online (Sandbox Code Playgroud)