Nodejs需要在文件更改后第二次返回相同的旧文件

时间:2012-10-28 12:52:36

标签: javascript node.js require

所以在我的nodejs服务器文件中,我有一行:

tools=require("./tools.js");

工具文件包含我更改的功能和类似功能,所以我想每次更改内容时都不会重新启动服务器,我可以简单地为我添加一些方法来重新使用tools.js,所以我做了。但是现在的问题是,当我启动程序时,更改tools.js并使其重新需要它,它再次需要它,就好像它仍然处于首次需要它时的状态。什么?

编辑:我不想在文件更改时重新启动应用程序,因为这与重新启动服务器相同,这是我想要阻止的!所以我需要让我重新要求的东西,忽略模块缓存或其他任何东西。

有什么想法可以帮到我吗?

5 个答案:

答案 0 :(得分:12)

如果您不想重新启动应用程序,请在每次需要时执行此操作。

var filename = path.resolve('./tools.js');
delete require.cache[filename];
var tools = require('./tools');

答案 1 :(得分:2)

如果我理解正确,你就会遇到Node的模块缓存。 http://nodejs.org/docs/latest/api/modules.html#modules_caching

如果这是一个选项,您可能希望为Node查找正确的重新加载器。例如,请参阅https://github.com/isaacs/node-supervisor

答案 2 :(得分:2)

看看主管。 Supervisor可以在文件更改时自动重启应用程序,并且设置简单。

npm install -g supervisor

supervisor app.js

答案 3 :(得分:2)

一旦node.js需要()s一个模块,任何后续调用require()都会从内存中获取它,实际的模块文件不会再次加载。您需要做的是使用nodemon(https://github.com/remy/nodemon)之类的工具,它会在文件更改时自动重启您的应用程序。

答案 4 :(得分:2)

这为我解决了:

let tools = require("./tools.js"); 
delete require.cache[require.resolve("./tools.js")];
tools = require("./tools.js");

信任此answer