2016-08-29 47 views
1

私はgulpファイルに多くのgulpタスクを持っており、各タスクが完了した後に関数を実行する必要があります。gulpタスクが終了したときに関数を実行する方法

私はこのような私のタスク登録取り扱わ:

var registerTask = function (taskName, dependencies, todo) { 
    if (isProduction) { 
    gulp.task(taskName, dependencies, todo); 
    } else { 
    var prefixedTaskName = '_' + taskName; 

    // the original task registers here with another name 
    gulp.task(prefixedTaskName, dependencies, todo); 

    // register my task to do after the original task is done 
    gulp.task(taskName, [prefixedTaskName], myRepeatedFunction); 
    } 
} 

を、私はこのように自分のタスクを登録します。

registerTask('foo', [], function() { 
    gulp 
    .src() 
    .pipe() 
    ... 
}) 

しかし、これは、ログ(下線タスク名)と私の端子が汚れます:

[15:54:17] Using gulpfile ~/Projects/xxx/gulpfile.js 
[15:54:17] Starting '_default'... 
[15:54:17] Starting '_remove-source-map'... 
[15:54:17] Starting '_fontastic'... 
[15:54:28] Finished '_fontastic' after 11 s 
[15:54:28] Starting 'fontastic'... 
[15:54:28] Finished 'fontastic' after 125 μs 
[15:54:28] Starting '_js-hint'... 
[15:54:28] Finished '_remove-source-map' after 11 s 
[15:54:28] Starting 'remove-source-map'... 
[15:54:28] Finished 'remove-source-map' after 59 μs 
[15:54:28] Starting '_sass'... 
[15:54:33] Finished '_sass' after 4.19 s 
[15:54:33] Starting 'sass'... 
[15:54:33] Finished 'sass' after 21 μs 
[15:54:33] Finished '_js-hint' after 5.11 s 
[15:54:33] Starting 'js-hint'... 
[15:54:33] Finished 'js-hint' after 18 μs 
[15:54:33] Starting '_js'... 
[15:54:50] Finished '_js' after 17 s 
[15:54:50] Starting 'js'... 
[15:54:50] Finished 'js' after 17 μs 
[15:54:50] Finished '_default' after 32 s 
[15:54:50] Starting 'default'... 
[15:54:50] Finished 'default' after 19 ms 

私は汚れたログなしで同じことをするより良い方法を探しています(私は - シルレントを使用したくない場合)

gulp.taskにコールバックがあった場合は、同じことをうまくやることができます。

答えて

3

Gulpは、タスクの実行機能をorchestratorから継承し、.on()という機能を使用してイベントリスナーを登録します。

タスクfooがあり、タスクfooが終了した後に関数を実行したいとします。あなたは非同期タスクare properly signalling completionを確認するを持っているこれが機能する

var gulp = require('gulp'); 

gulp.task('foo', function() { 
    // do task stuff 
}); 

gulp.on('task_stop', function(evt) { 
    if (evt.task == 'foo') { 
    // do stuff after task foo has finished 
    } 
}); 

:あなたはこのようなことを行うことができます。つまり、ストリームを返すか、非同期タスクでコールバック関数を呼び出すことを忘れないでください!

関連する問題