Запуск приложения 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')
})
выясняется, что:
- хотя я храню порожденный процесс в переменной вне контекста функции, он не сохраняется, поэтому при следующем запуске задачи запуска дочерний элемент
undefined
. -
child
нет
2 ответов
это так grunt-contrib-watch
в настоящее время порождает все задачи, выполняемые как дочерние процессы. Итак, переменная child
не в том же контексте процесса. Довольно скоро, grunt-contrib-watch@0.3.0
выйдет с . Это позволит вам настроить часы для запуска задачи spawn в том же контексте и сделает ваш пример выше.
взгляните на этот вопрос для немного больше информация:
посмотри грунт-nodemon который обрабатывает много головных болей, связанных с нерестом дочернего процесса.