NodeアプリケーションをGruntタスクとして実行しようとしています。ただし、監視タスクを並行して実行できるようにするには、これを子プロセスとして生成する必要があります。
これは機能します:
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
機能はありませんkill
…</li>