Node.js: how to reload module

az1mov picture az1mov · Nov 5, 2015 · Viewed 13.5k times · Source

I am new to NodeJS so probably I am doing some mistakes.

I have written a bunch of code in an external file called myapp. I start NodeJS for windows and from the interpreter window I type:

var myapp = require('d:/myapp.js');

then I can use my functions and variables in the external module.

The problem is that if I update the code in myapp then the interpreter does not re-read the file and it uses the old version.

Now, is this normal in the first place? How to work around this problem?

P.S.: I have spent hours in internet and searched in many forums including this. It was more confusing then anything else.

Thanks.

Answer

mihai picture mihai · Nov 1, 2018

There are some answers here as suggested in the comments.

However they are not REPL friendly, and might even use extra modules.

Here is a one line solution that you can paste in your REPL, inspired by the discussion on the other question:

function nocache(module) {require("fs").watchFile(require("path").resolve(module), () => {delete require.cache[require.resolve(module)]})}

The function will delete your module from the cache each time the file changes. To use it, just paste it in the REPL, call uncache("d:/myapp.js"), then use require normally.

> function nocache(module) {require("fs").watchFile(require("path").resolve(module), () => {delete require.cache[require.resolve(module)]})}
> nocache("d:/myapp.js");
> var myapp = require("d:/myapp.js");
......
> myapp = require("d:/myapp.js");
....