2014-04-20 25 views
5

Mam zadanie z haustem, które powoduje spawnięcie procesu potomnego jekyll. Kompiluje moją przecenę do pliku html w _site.Zarządzanie zależnościami Gulp podczas tworzenia procesów potomnych

Mam inne zadanie, które ma to zadanie jako zależność, ponieważ wykonuje pewne przetwarzanie końcowego wygenerowanego html. Jednakże, to wyzwala się zbyt wcześnie - jak wydaje się, że procesy potomne nie uwzględniamy do zarządzania zależność

Skąd mogę mieć pewność, że html zawsze biegnie po jekyll - najlepiej bez użycia:

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

zadania:

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()) 
}); 

Odpowiedz

13

Zmień swoje zadanie jekyll do include an async callback, tak:

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'); 
    }); 
}); 

Wszystko, co zostało zmienione, to dodanie argumentu funkcji wywołania zwrotnego do podpisu funkcji zadania i odsłuchanie zdarzenia exit w procesie tworzenia, aby obsłużyć wywołanie zwrotne.

Teraz dulka może zostać powiadomiona, gdy proces Jekyll zostanie zakończony. Używanie kodu wyjścia pozwoli ci uchwycić błędy i przerwać przetwarzanie.

Uwaga: Możesz być w stanie uprościć to, w zależności od kodu wyjścia:

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

Dzięki Powinienem bardziej dokładnie przeczytać dokumenty – Joseph