4

grunt-concurrent を使用して SIGINT を処理しようとしたときに見られる動作を理解するのに苦労しています。誰かがそれに光を当ててくれることを願っています。基本的に、宣言内で SIGINT ハンドラーを使用すると、並行タスクの1 つfunction(grunt) { }だけが SIGINT を参照するのはなぜですか?

簡単なセットアップ: grunt-concurrent を使用して、watch タスクと nodemon タスクを起動しています。Gruntfile.js私のファイルの正確な同時スタンザは次のとおりです。

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

Ctrl+を押したときにC、監視タスクの一部としてコピーされるいくつかのファイルをクリーンアップできるように、SIGINT を監視したかったのです。関数宣言Gruntfile.jsの外側のmy の最後に次を追加することから始めました。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) に対して 1 回と、grunt-concurrent で実行した 2 つのタスク (watchおよびnodemon:dev) のそれぞれに対して 1 回です。それは明らかに私が意図したものではありません。

function(grunt) { }メソッド内で SIGINT ハンドラーを移動すると、Ctrl+を押すCと、タスクに対して 1 回だけ実行されnodemon:devます。私が理解できないのは、タスクに対しても実行されていないwatch理由です(そして、両方を起動するマスター同時実行タスクdevに対しても!)、それは私を殺しています...ほとんどの場合、私はしたくないからです理解できず、このアプリが最終的に使用されるすべての異なるマシンで同じになるとは限らないときに、この動作に依存すること。

それで...考え?ここで何が欠けていますか?ありがとう!

4

0 に答える 0