从Node.js发布所需的模块

如何在运行时释放Node.js模块以节省内存或提高整体性能。

我的应用程序在运行时dynamic加载Node.js中的模块,但不会卸载它们中的任何一个。 我正在寻找这样的function。 在代码加载模块后更新已经被更改的模块; 并且还卸载可能不被进一步使用的模块。

任何见解?

谢谢。

这听起来像你正在创build某种插件系统。 我会看看节点VM的: http : //nodejs.org/docs/latest/api/vm.html

它允许你在沙箱中加载和运行代码,这意味着当它完成时,所有的内部分配应该被再次释放。

它被标记为不稳定,但这并不意味着它不起作用。 这意味着在将来的Node版本中API可能会改变。

例如,基于节点的smtp服务器Haraka使用VM模块(重新)加载插件。

要卸载脚本,可以这样做:

delete require.cache['/your/script/absolute/path'] // delete the cache var yourModule = require('/your/script/absolute/path') // load the module again 

所以,如果你有插件模块,你可以看这些文件的变化,然后dynamic卸载(删除caching),然后再次要求脚本。

但要确保你没有泄漏内存,你可以重新分配已更改的模块到旧的variables。 这是一个方便的工具,你可以检查内存: node-memwatch 。

祝你好运!