【问题标题】:Reload modules on the fly in Node REPL在 Node REPL 中即时重新加载模块
【发布时间】:2015-08-31 08:01:47
【问题描述】:

我正在使用 REPL 测试我的模块,如下所示:

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

有没有办法在我更改并保存模块时自动重新加载模块,而无需退出并再次运行 repl?

【问题讨论】:

    标签: javascript node.js read-eval-print-loop


    【解决方案1】:

    您可以使用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');
    });
    

    如果这不起作用,我很乐意尝试一下并获得一个可行的解决方案。


    编辑:如果它没有干净地进行垃圾收集(有任何打开的句柄/侦听器),则每次重新加载时都会泄漏。您可能需要向MyModule 添加一个“clean-exit”函数以优雅地停止一切,然后在 watch 处理程序中调用它。

    【讨论】:

      猜你喜欢
      • 2020-05-11
      • 1970-01-01
      • 2016-10-12
      • 1970-01-01
      • 2012-07-03
      • 2012-10-19
      • 2012-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多