我有两个gulp任务
gulp.task('build:dev', ['task1', task2', task3'], () => {
doCssmin({'destination': ['file1', 'file2']});
});
gulp.task('build:prod', ['task1', task2', task3'], () => {
doCssmin({'destination': ['file3', 'file4']});
});
现在我有cssMin
和build:dev
之间共享的build:prod
任务,因此我将其创建为与两者共享的功能。
function doCssmin(files) {
_.each(files, function(val, key) {
gulp.src(val)
.pipe(minifyCss({compatibility: 'ie8'}))
.pipe(rename(basename(key)))
.pipe(gulp.dest(dirname(key)));
});
}
和doCssmin
接受files
参数build:dev
和build:prod
他们有不同的文件来缩小css。如果我运行build:dev
或build:prod
doCssmin
将以异步方式运行。但doCssmin
取决于task2
。
我的问题是如何将doCssmin
提取到gulp任务并接受files
参数,以便可以与build:dev
和build:prod
任务共享?
不确定它是否太混乱了?
答案 0 :(得分: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']);
});