2014-04-20 6 views
5

Ich habe eine Schluckaufgabe, die einen jekyll child-Prozess hervorbringt. Es kompiliert meine Markdown in eine HTML-Datei in _site.Verwalten von Gulp-Abhängigkeiten beim Erstellen untergeordneter Prozesse

Ich habe eine andere Aufgabe, die diese Aufgabe als eine Abhängigkeit hat, da es einige Nachbearbeitungen des generierten HTML durchführt. Allerdings löst es sich zu früh - wie es sein, dass Kindprozesse

Wie kann ich sicherstellen, nicht Faktor in das Abhängigkeitsmanagement scheint, dass html läuft immer nach jekyll - vorzugsweise ohne Verwendung:

jekyll.on('exit', function (code, signal) { 
    gulp.run('html'); 
}); 

Aufgaben:

gulp.task('jekyll', ['scripts', 'styles'], function() { 
    var spawn = require('child_process').spawn; 
    var jekyll = spawn('jekyll', ['build', '--config', 'app/markdown/_config.yml', '--trace'], {stdio: 'inherit'}); 
}); 



gulp.task('html', ['jekyll'] function() { 
    return gulp.src('_site/*.html') 
    .pipe($.useref.assets()) 
}); 

Antwort

13

ändern jekyll Aufgabe include an async callback, etwa so:

gulp.task('jekyll', ['scripts', 'styles'], function (gulpCallBack) { 
    var spawn = require('child_process').spawn; 
    var jekyll = spawn('jekyll', ['build', '--config', 'app/markdown/_config.yml', '--trace'], {stdio: 'inherit'}); 

    jekyll.on('exit', function(code) { 
     gulpCallBack(code === 0 ? null :'ERROR: Jekyll process exited with code: '+code'); 
    }); 
}); 

Alles, was geändert wird, ist das Hinzufügen des Rückruffunktionsarguments zur Signatur der Aufgabenfunktion und das Abhören des -Ereignisses in Ihrem erstellten Prozess, um den Rückruf zu verarbeiten.

Jetzt kann Schluck benachrichtigt werden, wenn der Jekyll-Prozess beendet wird. Mit dem Exit-Code können Sie Fehler erfassen und die Verarbeitung stoppen.

Hinweis: Sie könnten in der Lage sein, dies zu vereinfachen, auf dem Exit-Code abhängig:

jekyll.on('exit', gulpCallBack); 
+0

Dank, ich soll mehr die Dokumentation gelesen habe, gründlich – Joseph