javascriptnode.js

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 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

  • 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": "..."
    }