with-autoreloading

0.0.0 • Public • Published

With Autoreloading

Require a magically self-reloading module. Useful if you want to try out exploratory changes in the REPL to code already in a file on disk.

// test.js
module.exports = function() {
  return 'old';
};

// REPL
> var test = require('with-autoreloading')('./test');
> test();
'old'

// test.js, edited and saved
module.exports = function() {
  return 'new';
}

// same REPL
> test();
'new'
So how far did you go with this
// numbers.js
module.exports = {
  numbers: [ 1, 2, 3 ],
  multiply: function() {
    return this.numbers.map(function(num) {
      return num * 2;
    })
  }
}

// REPL
> var numbers = require('with-autoreloading')('./numbers')
> numbers.numbers
[ 1, 2, 3 ]
> numbers.multiply()
[ 2, 4, 6 ]

// numbers.js, edited & saved
module.exports = {
  numbers: [ 4, 5 ],
  multiply: function() {
    return this.numbers.map(function(num) {
      return num * 3;
    })
  }
}

// same REPL
> numbers.numbers
[ 4, 5 ]
> numbers.multiply()
[ 9, 15 ]
OK cool. Tell me more.
// car.js
function Car() {};

Car.prototype.wheels = 4;

Car.prototype.replaceTires = function() {
  if(this.wheels != 4) console.error('that\'s a weird number of wheels...');
  return this.wheels + ' tires replaced!';
};

module.exports = Car;

// REPL
> var Car = require('with-autoreloading')('./car');
> var myCar = new Car();
> myCar.replaceTires();
'4 tires replaced!'

// edited car.js
(snip)
Car.prototype.wheels = 6;
(snip)

// same REPL
> myCar.replaceTires()
that's a weird number of wheels...
'6 tires replaced!'
No friggin way

Yeah seriously.

So how does it do that

A middleman proxy object/function. When you save the file, it clears the require cache for that file, requires it again, and has the proxy call through to the new code.

Could I use this in production?

Please don't. Use like, supervisor or nodemon or something more like that. This is aimed at the REPL, and even there I'm not convinced it's 100% stable/correct (but useful enough despite that).

Tests

npm test

Package Sidebar

Install

npm i with-autoreloading

Weekly Downloads

0

Version

0.0.0

License

BSD

Last publish

Collaborators

  • shackpank