在Node REPL中动态重新加载模块

8

我正在使用 REPL 测试我的模块,步骤如下:

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

是否有一种方法,在我更改和保存模块时自动重新加载模块,而无需退出并再次运行repl?

1个回答

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

如果那不行,我很乐意尝试一下,并找到一个可行的解决方案。

编辑:如果它不能进行垃圾回收(存在任何打开的句柄/监听器),每次重新加载时都会泄漏。您可能需要添加一个“clean-exit”函数到MyModule中以优雅地停止所有内容,然后在观察处理程序中调用该函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接