2015-10-29 28 views
0

我有兩個一飲而盡任務如何將對象傳遞給吞噬任務以便能夠同步運行該任務?

gulp.task('build:dev', ['task1', task2', task3'],() => { 
    doCssmin({'destination': ['file1', 'file2']}); 
}); 


gulp.task('build:prod', ['task1', task2', task3'],() => { 
    doCssmin({'destination': ['file3', 'file4']}); 
}); 

現在我有這build:devbuild:prod之間共享cssMin的任務,所以我創建了一個功能與兩者共享。

doCssmin接受files參數作爲build:devbuild:prod他們有不同的文件壓縮CSS。如果我運行build:devbuild:proddoCssmin將異步運行。但doCssmin取決於task2

我的問題是我怎麼提取doCssmin到一飲而盡任務,並接受files參數,以便它可以與build:devbuild:prod任務共享?

不確定它是否太混亂?

+0

我幾乎回答了[完全同樣的事情昨天(HTTP: //stackoverflow.com/questions/33395213/dry-up-gulp-tasks/33395314#33395314)。這對你有幫助嗎? – ssube

+0

感謝您的超級快速回復,現在覈對一下。 – toy

+0

如果這不相同,您可能需要循環進入Gulp的數組支持(您可以返回一組東西)以及任務可以完成的'done'回調。 – ssube

回答

1

昨天,我answered a question on making your Gulp tasks more DRY。我相信這個答案的很大一部分也適用於此。

要支持與之相關的循環,您希望合併從gulp.src收到的流。使用the example here

gulp.task('test', function() { 
    var bootstrap = gulp.src('bootstrap/js/*.js') 
    .pipe(gulp.dest('public/bootstrap')); 

    var jquery = gulp.src('jquery.cookie/jquery.cookie.js') 
    .pipe(gulp.dest('public/jquery')); 

    return merge(bootstrap, jquery); 
}); 

對於數組,你可以使用Array.prototype.map的物品轉換成流,然後合併所有這些:

function minifyCss(paths) { 
    return merge.apply(this, paths.map(function (path) { 
    gulp.src(path) 
     .pipe(minifyCss({compatibility: 'ie8'})) 
     .pipe(rename(basename(path))) 
     .pipe(gulp.dest(dirname(path))); 
    })); 
} 

gulp.task('test', function() { 
    return minifyCss(['foo', 'bar']); 
});