在Node REPL中随时重新加载模块

我正在用REPLtesting我的模块,像这样:

repl.start({ input: process.stdin, output: process.stdout }) .context.MyModule = MyModule; 

有没有办法自动重新加载模块,当我改变和保存它,而不必退出并再次运行repl?

您可以使用chokidar模块并强制重新加载(您将在模块中丢失运行时环境,但应自动重新加载)。

 var ctx = repl.start({ input: process.stdin, output: process.stdout }) .context; ctx.MyModule = require('./mymodule'); chokidar.watch('.', {ignored: /[\/\\]\./}).on('all', function(event, path) { delete require.cache['./mymodule']; ctx.MyModule = require('./mymodule'); }); 

如果这不起作用,我很乐意玩一下,并得到一个工作的解决scheme。


编辑:如果它不干净收集(有任何打开的句柄/侦听器),这将每次重新加载时泄漏。 您可能需要向MyModule添加一个“干净退出”函数来正常停止所有事情,然后在手表处理程序中调用它。