Запуск приложения Node через Grunt

Я пытаюсь запустить приложение узла в качестве задачи Grunt. Однако мне нужно создать это как дочерний процесс,чтобы позволить мне параллельно запускать задачу watch.

это работает:

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

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

однако, когда изменения обнаружены задачей watch, это снова вызовет задачу start. Прежде чем я создам другой дочерний процесс моего приложения узла, мне нужно убить предыдущий.

Я не могу понять, как убить процесс, однако. Что-то вроде этого не работает:

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. хотя я храню порожденный процесс в переменной вне контекста функции, он не сохраняется, поэтому при следующем запуске задачи запуска дочерний элемент undefined.
  2. child нет

2 ответов


это так grunt-contrib-watch в настоящее время порождает все задачи, выполняемые как дочерние процессы. Итак, переменная child не в том же контексте процесса. Довольно скоро, grunt-contrib-watch@0.3.0 выйдет с . Это позволит вам настроить часы для запуска задачи spawn в том же контексте и сделает ваш пример выше.

взгляните на этот вопрос для немного больше информация:

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


посмотри грунт-nodemon который обрабатывает много головных болей, связанных с нерестом дочернего процесса.