我有这个gulp任务:
gulp.task('make_prod_fl', ['rename_bundles'], function () {
gulp.src('index-fl.html')
// common piped tasks here
.pipe(rename("index-prod-fl.html"))
.pipe(gulp.dest('./'));
});
和此:
gulp.task('make_prod_ie', ['rename_bundles'], function () {
gulp.src('index-ie.html')
// common piped tasks here
.pipe(rename("index-prod-ie.html"))
.pipe(gulp.dest('./'));
});
这些非常相似的任务有很多。
有没有办法可以组合常见任务,以便不必为我运行的每个make_prod_xx任务多次重复相同的公共代码?
答案 0 :(得分:2)
由于Gulp只是JavaScript,因此在Gulpfile中有许多方法可以保存DRY。您选择哪一个取决于您的特定用例(最终,个人偏好和品味)。
这是一个关于如何抽象出Gulpfile中相似之处的小样本:
您可以使用返回任务功能的函数:
function rn(name) {
return function() {
return gulp.src('index-' + name + '.html')
.pipe(rename('index-prod-' + name + '.html'))
.pipe(gulp.dest('./'));
}
}
gulp.task('make_prod_fl', rn('fl'));
gulp.task('make_prod_ie', rn('ie'));
您可以使用lazypipe
重用链式pipe()
语句:
function rn(name) {
return (lazypipe()
.pipe(rename, 'index-prod-' + name + '.html')
.pipe(gulp.dest, './'))();
}
gulp.task('make_prod_fl', function () {
return gulp.src('index-fl.html').pipe(rn("fl"));
});
gulp.task('make_prod_ie', function () {
return gulp.src('index-ie.html').pipe(rn("ie"));
});
您可以在循环中动态创建任务:
['fl', 'ie'].forEach(function(name) {
gulp.task('make_prod_' + name, function () {
return gulp.src('index-' + name + '.html')
.pipe(rename('index-prod-' + name + '.html'))
.pipe(gulp.dest('./'));
});
});