通过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') }) 

看起来:

  1. 尽pipe我将生成的进程存储在函数上下文之外的variables中,但它不会保留,所以下次启动任务运行时,child是undefined
  2. child没有killfunction…

这是因为grunt-contrib-watch目前将所有任务运行为subprocess。 所以variableschild不在同一个进程上下文中。 相当快, grunt-contrib-watch@0.3.0将与一个nospawn选项发布。 这可以让你configuration手表在同一个上下文中产生任务运行,并让你的上面的例子工作。

看看这个问题了解更多信息:

https://github.com/gruntjs/grunt-contrib-watch/issues/45

看看grunt-nodemon ,它处理许多与产生subprocess有关的头痛问题。