How to auto-reload files in Node.js?
Any ideas on how I could implement an auto-reload of files in Node.js? I'm tired of restarting the server every time I change a file.
Apparently Node.js' require()
function does not reload files if they already have been required, so I need to do something like this:
var sys = require('sys'),
http = require('http'),
posix = require('posix'),
json = require('./json');
var script_name = '/some/path/to/app.js';
this.app = require('./app').app;
process.watchFile(script_name, function(curr, prev){
posix.cat(script_name).addCallback(function(content){
process.compile( content, script_name );
});
});
http.createServer(this.app).listen( 8080 );
And in the app.js file I have:
var file = require('./file');
this.app = function(req, res) {
file.serveFile( req, res, 'file.js');
}
But this also isn't working - I get an error in the process.compile()
statement saying that 'require' is not defined. process.compile
is evaling the app.js, but has no clue about the node.js globals.
Solution 1:
A good, up to date alternative to supervisor
is nodemon
:
Monitor for any changes in your node.js application and automatically restart the server - perfect for development
To use nodemon
with version of Node without npx
(v8.1 and below, not advised):
$ npm install nodemon -g
$ nodemon app.js
Or to use nodemon
with versions of Node with npx
bundled in (v8.2+):
$ npm install nodemon
$ npx nodemon app.js
Or as devDependency in with an npm script in package.json:
"scripts": {
"start": "nodemon app.js"
},
"devDependencies": {
"nodemon": "..."
}
Solution 2:
node-supervisor is awesome
usage to restart on save for old Node versions (not advised):
npm install supervisor -g
supervisor app.js
usage to restart on save for Node versions that come with npx
:
npm install supervisor
npx supervisor app.js
or directly call supervisor
in an npm script:
"scripts": {
"start": "supervisor app.js"
}
Solution 3:
i found a simple way:
delete require.cache['/home/shimin/test2.js']