6

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

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

工具文件包含我更改很多的功能等,所以我想不是每次更改时都重新启动服务器,我可以简单地添加一些方法让我重新需要 tools.js,所以我做到了。但是现在的问题是,当我启动程序时,更改 tools.js 并使其重新需要它,它再次需要它,就好像它仍处于第一次需要时的状态一样。什么?

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

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

4

5 回答 5

18

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

var path = require('path');
var filename = path.resolve('./tools.js');
delete require.cache[filename];
var tools = require('./tools');
于 2012-10-28T15:42:24.987 回答
4

这为我解决了它:

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

对这个答案的信任

于 2021-01-20T06:59:31.640 回答
2

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

于 2012-10-28T12:58:09.500 回答
2

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

如果可以的话,您可能想为 Node 寻找合适的重新加载器。例如,请参阅https://github.com/isaacs/node-supervisor

于 2012-10-28T12:55:43.183 回答
2

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

npm install -g supervisor

supervisor app.js

于 2012-10-28T12:55:51.947 回答