4

我很难理解我在使用 grunt-concurrent 并尝试处理 SIGINT 时看到的行为,并希望有人能对此有所了解。基本上:当我在function(grunt) { }声明中使用 SIGINT 处理程序时,为什么只有一个并发任务会看到 SIGINT?

简要设置:我正在使用 grunt-concurrent 来启动 watch 和 nodemon 任务;我的文件的确切并发节Gruntfile.js是:

concurrent: {
    dev: {
        options: {
            logConcurrentOutput: true
        },
        tasks: [ 'watch', 'nodemon:dev' ]
    }
}

我想监视 SIGINT,这样当我点击Ctrl+时C,我可以清理一些作为监视任务的一部分被复制的文件。我首先在函数声明Gruntfile.js之外将以下内容添加到我的末尾:module.exports = function(grunt) { ... }

process.on('SIGINT', function() {
    console.log('Cleaning up after the dev server...');
    console.log(JSON.stringify(process.argv));
});

当它包含在其中并且我点击Ctrl+C时,它运行了 3 次——一次用于我运行的主要 grunt 任务 ( dev),一次用于 grunt-concurrent 运行的两个任务中的每一个 (watchnodemon:dev)。这显然不是我的本意。

当我在方法中移动 SIGINT 处理程序function(grunt) { }时,然后当我点击Ctrl+C时,它只运行一次 - 用于nodemon:dev任务。我无法理解的是为什么我也没有看到它为该watch任务运行(并且对于dev触发它们的主并发任务!),它有点杀了我......主要是因为我不想要当我无法理解它并且不能确定它在这个应用程序最终会出现的所有不同机器上不会相同时,依赖于这种行为。

所以……想法?我在这里想念什么?谢谢!

4

0 回答 0