ノードアプリケーションをグランタタスクとして実行しようとしています。私は子プロセスとしてこれを生成する必要がありますが、私には並列タスクを実行させることができます。グランツ経由のノードアプリの実行
これは動作します:
grunt.registerTask('start', function() {
grunt.util.spawn(
{ cmd: 'node'
, args: ['app.js']
})
grunt.task.run('watch:app')
})
変更は時計タスクによって検出された場合しかし、これが再び開始タスクをトリガーします。私のNodeアプリケーションの別の子プロセスを生成する前に、前のものを強制終了する必要があります。
ただし、プロセスを強制終了する方法を理解できません。このような何かが動作しません:私は、関数コンテキストの外側の変数で作成されたプロセスを格納していても、それが持続しない
- ので、次の時間:
var child grunt.registerTask('start', function() { if (child) child.kill() child = grunt.util.spawn( { cmd: 'node' , args: ['app.js'] }) grunt.task.run('watch:app') })
と思われます開始タスクが実行され、子は
undefined
です。 child
はgrunt-contrib-watch
は現在、子プロセスとして、すべてのタスクの実行を生成しますので、これはある...
私は 'grunt-contrib-watch'モジュールを[nospawn](https://github.com/gruntjs/grunt-contrib-watch/tree/nospawn)ブランチに置き換え、' nospawn'を設定しました。オプションをtrueに設定します:https://gist.github.com/OliverJAsh/5021187。 'child'は2番目の関数呼び出しでまだ定義されていません。また、どのように私は子供のプロセスを殺すことができるか知っていますか? –
Gruntfileはjsonファイルではなく、jsファイルのみです。 grunt.task.run()でwatchタスクを呼び出す必要もありません。時計を使用してコンテキストを共有する例を次に示します。https://github.com/gruntjs/grunt-contrib-watch/blob/nospawn/test/fixtures/nospawn/Gruntfile.js#L35 –
子プロセスを強制終了するには、次の操作を行います。 'child.kill( 'SIGINT');' –