Giter VIP home page Giter VIP logo

node-hotswap's Introduction

Basic usage

Just write this in your main file (or in the repl):

require('hotswap');

And then add this line to modules you want to be reloaded (it tells node-hotswap to watch this file):

module.change_code = 1;

Now if you change your modules, they will be reloaded automatically.

Demo (you have to wait more than 1 second between writings - it's file system limitations):

var fs = require('fs');
var hotswap = require('hotswap');

// writing the initial version of test.js
fs.writeFileSync("hotswap-test.js", "module.exports.version = 0; module.change_code = true;");

// requiring it
var test = require('./hotswap-test')
console.log(test);

hotswap.on('swap', function() {
        // we are going to console.log(test) whenever it's changed
        console.log(test);
});

setTimeout(function() {
        fs.writeFile("hotswap-test.js", "module.exports.version = 1; module.change_code = true;")
}, 1000);

setTimeout(function() {
        fs.writeFile("hotswap-test.js", "module.exports.hi_there = function(){}; module.change_code = true;")
}, 2000);

setTimeout(function() {
        fs.writeFile("hotswap-test.js", "module.exports = {wow: 'thats working'}; module.change_code = true;")
}, 3000);

/* outputs:
 * { version: 0 }
 * { version: 1 }
 * { hi_there: [Function] }
 * { wow: 'thats working' }
 */

What does it do?

This module overrides default functions in require.extension and do some magic there. It remembers all references to exports objects of modules with function module.change_code defined. When module is changed, contents of it's old exports object is replaced with contents of the new one.

// So, this will work fine, m will be changed:
var m = require('hot-swapping-module');

// but "hotswap" have to way to replace m.func with new value
// so dont do this unless you really want to use old code, 
var m.func = require('hot-swapping-module').func;

Events

require('hotswap') returns an EventEmitter that emits the following events:

  • change - when one of the watched modules has changed
  • swap - after successful replacing an old module with a new version
  • error - if there was a filesystem error or something like that

Local variables

When old module is replaced by the new one, local variables of the old module will be lost. If you want to save them, you can use module.change_code.

If module.change_code is defined as a function it will be called before module is reloaded. So you can write up something like that:

module.cache = {} // it's important data you want to save

module.change_code = function(oldmod, newmod, exports_object) {
  newmod.cache = oldmod.cache;
}

Configuration

You can configure node-hotswap using configure function.

require('hotswap').configure({
	// a list of extensions registered by hotswap
	//
	// you can define your own extension for such files if you are afraid 
	// that this module would mess up with some other modules (shouldn't 
	// happen though)
    //
	// default: {'.js': 'js', '.coffee': 'coffee'}
	extensions: {'.js': ['js', 'jsx'], '.coffee': 'coffee'},

	// enable or disable fs.watch() on hotswapping files
	// default: true
	watch: true,

	// automatically reload files on change
	// default: true
	autoreload: true,
});

Todo

I should really write up some good documentation and examples here -_-

node-hotswap's People

Contributors

rlidwka avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.