简体   繁体   中英

Nodejs require returns same old file when requiring a second time after the file changed

So inside my nodejs server file I have the line:

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

The tools file contains functions and thelike that I change alot, so I figured instead of restarting the server everytime I change something, I could simply add some way for me to re-require the tools.js, and so I did. However now the problem is, when I start the program, change the tools.js and make it re-require it, it requires it again as if it was still in the state it was when it was first required. What?

Edit: I don't want to restart the app upon a file change, since that would be the same as restarting the server, which is what I want to prevent! So I need something that let's me re-require it, ignoring module caching or whatever.

Any ideas what could help me here?

If you don't want to restart the app do this every time you require it.

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

This solved it for me:

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

Creds to this answer

If I understood you correctly, you're running into Node's module caching. http://nodejs.org/docs/latest/api/modules.html#modules_caching

You might want to look into a proper reloader for Node instead, if that's an option. See https://github.com/isaacs/node-supervisor for instance.

Have a look at supervisor. Supervisor can restart the application automatically upon file changes and is simple to setup.

npm install -g supervisor

supervisor app.js

Once node.js require()sa module, any subsequent call to require() fetches it from memory, the actual module file doesn't get loaded again. What you need to do is use a tool like nodemon (https://github.com/remy/nodemon ), which automatically restarts your app when files are changed.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM