Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

watchFile and reload modules dynamically for node.js (useful for front end development) - it would be nice if someone could implement the new require.cache support with my require as falback

branch: master
README.md

node.js hot reload of js files. (it is not restart, more like erlang)

hotreload.path

hotreload.watch(script, reload_callback)

watch script file, onchange load the script file and call callback

script is string

reload_callback(newmodule) is a function, it has an argument - the loaded module object.

hotreload.watch(watchpath, script , reload_callback)

watch one file and load another.

watchpath can be a string or an array script is string

hotreload.watchrel(script, reload_callback)

watch script file relative to @hotreload.path@

hotreload.watchrel(watchpath, script , reload_callback)

example:

server.js:

var http = require('http');
var hotreload= require('node-hot-reload');
    hotreload.path=__dirname;

//1st require the module normaly

var mymodule= require('./mymodule_example'); 


//2nd watch it and reload it dinamicaly

// explained example:

hotreload.watchrel('mymodule_example.js', function (newmodule){

   /* you can put here staff to make your module
      look like it was initialized well. */

   newmodule.name=mymodule.name; // take care to copy previous data

   //mymodule.init(); // init the module before if possible,
                      // it will save error time.
   // option 1
   // replace reference - probably the best way
   // but you must update all references you have 
   // replace reference - probably the best way
   // but you must update all references you have 

   //mymodule=newmodule;
   //myothermodulereference=newmodule;


   // option 2
   // copy properties from new module to old module
   // as a solution to not having to update
   // references to module object
   hotreload.copy(mymodule,newmodule);

   // option 3
   //   manually patch the old object with parts of the new object.

   // initialization or more initialization after switching to the new module
   // mymodule.init();
   // better don't do it, you may get errors,
   // because of not well-initialized module.

});

// simple example1:
//hotreload.watchrel('mymodule_example.js',
//  function (newmodule){ mymodule=newmodule; } );

// simple example2:
//hotreload.watchrel('mymodule_example.js',
//  function (newmodule){ hotreload.copy(mymodule,newmodule); } );

// idea: add loader function to automate reloading of modules:
//  

mymodule.name="Shimon";

http.createServer(function (request, response) {

  try
  {
   response.writeHead(200, {'Content-Type': 'text/plain'});
   response.end(mymodule.time() + '\n');
  }
  catch(err)
  {
   response.end(err.stack);
   console.log(err.stack);
  }

  //to do, main module reloadable instead of above you might use: 
  //mymodule.handlerequest(req,res); 

}).listen(8124);

console.log('Server running at http://127.0.0.1:8124/');

mymodule_example.js:

console.log('mymodule loaded');
exports.name='test';
exports.date=(new Date).toString();
exports.time=function ()
{
                      //  edit the number to see it working
 return  " test number 17 name: "+exports.name+" , loaded at: "+exports.date.toString();
}
exports.filename=__filename;
Something went wrong with that request. Please try again.