Estoy intentando ejecutar mi aplicación Node como una tarea Grunt. Sin embargo, tengo que generar esto como un proceso secundario para poder ejecutar la tarea de vigilancia en paralelo.
Esto funciona:
grunt.registerTask('start', function () { grunt.util.spawn( { cmd: 'node' , args: ['app.js'] }) grunt.task.run('watch:app') })
Sin embargo, cuando la tarea de observación detecta cambios, esto activará la tarea de inicio nuevamente. Antes de generar otro proceso secundario de mi aplicación Node, debo eliminar el anterior.
Sin embargo, no puedo averiguar cómo matar el proceso. Algo como esto no funciona:
var child grunt.registerTask('start', function () { if (child) child.kill() child = grunt.util.spawn( { cmd: 'node' , args: ['app.js'] }) grunt.task.run('watch:app') })
Parece que:
undefined
está undefined
. child
no tiene función de kill
… Esto se debe a que grunt-contrib-watch
actualmente genera todas las tareas ejecutadas como procesos secundarios. Así que la variable child
no está dentro del mismo contexto de proceso. grunt-contrib-watch@0.3.0
pronto, grunt-contrib-watch@0.3.0
se lanzará con una opción nospawn
. Esto le permitirá configurar la ejecución del reloj para generar tareas en el mismo contexto y haría que su ejemplo anterior funcione.
Echa un vistazo a este tema para un poco más de información:
Eche un vistazo a grunt-nodemon que maneja muchos de los dolores de cabeza relacionados con el proceso de engendrar un niño.