Ausführen der Node-App über Grunt

Ich versuche, meine Node-Anwendung als Grunt-Task auszuführen. Ich muss dies jedoch als untergeordneter Prozess erzeugen, damit ich die Überwachungstask parallel ausführen kann.

Das funktioniert:

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

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

Wenn jedoch Änderungen von der Überwachungsaufgabe erkannt werden, wird die Startaufgabe erneut ausgelöst. Bevor ich einen weiteren untergeordneten Prozess meiner Node-App spawne, muss ich den vorherigen beenden.

Ich kann jedoch nicht herausfinden, wie ich den Prozess beenden soll. So etwas funktioniert nicht:

var child

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

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

Anscheinend:

Obwohl ich den erzeugten Prozess in einer Variablen außerhalb des Funktionskontexts speichere, bleibt er nicht bestehen. Wenn die Startaufgabe das nächste Mal ausgeführt wird, ist child diesundefined.child hat keinkill Funktion…

Antworten auf die Frage(2)

Ihre Antwort auf die Frage