2014-12-30 5 views
3

Я знаю, что один часто используемый метод, чтобы сделать Глоток задача синхронным является return выходом:Несколько синхронных потоков в одной задаче Gulp?

gulp.task('mytask', function(){ 
    return gulp.src('myfile.css') 
    .pipe(dosomething()) 
    .pipe(gulp.dest('./css')); 
}); 

Но что делать, если есть несколько потоков, которые происходят в одной задаче?

gulp.task('anothertask', function(){ 
    gulp.src('file1.css') 
    .pipe(dosomething()) 
    .pipe(gulp.dest('./css')); 

    gulp.src('file2.css') 
    .pipe(dosomethingElse()) 
    .pipe(gulp.dest('./css')); 
}); 

Как вы собираетесь делать эту задачу синхронной? В настоящее время Gulp сообщает, что задача завершается немедленно, и потоки запускаются одновременно и завершаются после завершения задачи. Очевидно, это происходит потому, что никакие потоки не возвращаются. Должен ли я просто вернуть последний поток в задачу? Или более правильно возвращать результат обеих задач? Если да, то как вы это делаете?

+0

Что-то вроде [поток серии] (https://github.com/rschmukler/stream-series), вероятно, что ты ищешь. –

+0

Возможный дубликат [Как заставить вызовы gulp работать синхронно?] (Http://stackoverflow.com/questions/27459899/how-do-i-force-gulp-calls-to-run-synchronously) –

+0

Возврат поток не делает задачу синхронной. Это просто дает gulp способ узнать, когда задача выполнена (прослушивание события «end» в потоке). – Ben

ответ

7

recommended way использовать несколько трубопроводов в задаче Глоток является использование merge-stream:

var merge = require('merge-stream'); 

gulp.task('anothertask', function(){ 
    var stream1 = gulp.src('file1.css') 
    .pipe(dosomething()) 
    .pipe(gulp.dest('./css')); 

    var stream2 = gulp.src('file2.css') 
    .pipe(dosomethingElse()) 
    .pipe(gulp.dest('./css')); 

    return merge(stream1, stream2); 
});