我如何在node.js中不需要节点模块并释放其内存



我读过几篇关于删除需求的文章。像这样缓存['path to module']:
http://blog.alexanderseville.com/post/31919659559/un-require-in-nodejs

但它对我不起作用。在我的节点文件中,有这两行:

var fileToJsonParser = require('xl -to-json');
删除require.cache [require.resolve (xls-to-json)];

我在Windows上运行,在任务管理器中观察内存使用情况。没有这两行,node.exe的内存使用量约为30 MB,但只要我需要'xls-to-json',即使我试图删除require.cache,内存使用量也会上升到120 MB。

正如Alex Seville所解释的那样,这里需要注意的重要事情是,不是以与包含相同的方式引用模块。例如,如果我们想引入Mocha,然后不需要它,下面的代码将不起作用:

var path = "mocha";
var mocha = require(path);
if (require.cache[path]){
    // Never gets here:
    delete require.cache[path];
}

相反,您会发现缓存中的路径类似于/node_modules/mocha/lib/mocha.js。这就是为什么在生产环境中使用这种技术可能不是一个好主意的众多原因之一。

话虽如此,它可以完成。

检查一个名为'resolve'的包,它可能会有所帮助。在您的例子中,使用resolve.sync:

var fileToJsonParser = require('xls-to-json');
var resolve = require('resolve');
var path = resolve.sync('xls-to-json');
console.log("Path to module found:", path);
if (require.cache[path]){
    delete require.cache[path];
}

我还没有测试确切的代码,但我确实希望它能工作。我希望这对你有帮助。:)

最新更新