13

我正在尝试将我的 Node 应用程序作为 Grunt 任务运行。但是,我需要将其作为子进程生成,以允许我并行运行监视任务。

这有效:

grunt.registerTask('start', function () {
  grunt.util.spawn(
    { cmd: 'node'
    , args: ['app.js']
    })

  grunt.task.run('watch:app')
})

但是,当 watch 任务检测到变化时,这会再次触发 start 任务。在生成 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')
})

看起来:

  1. 即使我将生成的进程存储在函数上下文之外的变量中,它也不会持续存在,因此下次运行启动任务时,child 是undefined.
  2. child没有kill功能……</li>
4

2 回答 2

5

看看grunt-nodemon,它处理了很多与生成子进程相关的问题。

于 2013-11-05T03:39:53.573 回答
4

这是因为grunt-contrib-watch当前产生的所有任务都作为子进程运行。所以变量child不在同一个进程上下文中。很快,grunt-contrib-watch@0.3.0将发布一个nospawn选项。这将允许您将手表配置为在同一上下文中生成任务运行,并使您的上述示例正常工作。

请查看此问题以获取更多信息:

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

于 2013-02-23T20:08:01.483 回答