通过Grunt运行Node应用程序
我试图运行我的节点应用程序作为一个Grunt任务。 但是,我需要将其作为一个subprocess产生,以允许我并行运行watch任务。
这工作:
grunt.registerTask('start', function () { grunt.util.spawn( { cmd: 'node' , args: ['app.js'] }) grunt.task.run('watch:app') })
但是,当监视任务检测到更改时,这将再次触发启动任务。 在我生成Node应用程序的另一个subprocess之前,我需要杀死前一个进程。
但是,我不知道如何杀死这个过程。 像这样的东西不起作用:
var child grunt.registerTask('start', function () { if (child) child.kill() child = grunt.util.spawn( { cmd: 'node' , args: ['app.js'] }) grunt.task.run('watch:app') })
看起来:
- 尽pipe我将生成的进程存储在函数上下文之外的variables中,但它不会保留,所以下次启动任务运行时,child是
undefined
。 -
child
没有kill
function…
这是因为grunt-contrib-watch
目前将所有任务运行为subprocess。 所以variableschild
不在同一个进程上下文中。 相当快, grunt-contrib-watch@0.3.0
将与一个nospawn
选项发布。 这可以让你configuration手表在同一个上下文中产生任务运行,并让你的上面的例子工作。
看看这个问题了解更多信息:
看看grunt-nodemon ,它处理许多与产生subprocess有关的头痛问题。