使用流工厂共享流
如果你在多个任务中使用相同的插件,你可能会想要进行代码复用(DRY)。这种方法将允许你创建工厂来拆分常用的流链。
我们将使用 lazypipe 来完成这项工作。
这是我们的示例文件:
var gulp = require('gulp');
var uglify = require('gulp-uglify');
var coffee = require('gulp-coffee');
var jshint = require('gulp-jshint');
var stylish = require('jshint-stylish');
gulp.task('bootstrap', function() {
return gulp.src('bootstrap/js/*.js')
.pipe(jshint())
.pipe(jshint.reporter(stylish))
.pipe(uglify())
.pipe(gulp.dest('public/bootstrap'));
});
gulp.task('coffee', function() {
return gulp.src('lib/js/*.coffee')
.pipe(coffee())
.pipe(jshint())
.pipe(jshint.reporter(stylish))
.pipe(uglify())
.pipe(gulp.dest('public/js'));
});
使用 lazypipe 后,我们的文件如下所示:
var gulp = require('gulp');
var uglify = require('gulp-uglify');
var coffee = require('gulp-coffee');
var jshint = require('gulp-jshint');
var stylish = require('jshint-stylish');
var lazypipe = require('lazypipe');
// 使用 lazypipe
var jsTransform = lazypipe()
.pipe(jshint)
.pipe(jshint.reporter, stylish)
.pipe(uglify);
gulp.task('bootstrap', function() {
return gulp.src('bootstrap/js/*.js')
.pipe(jsTransform())
.pipe(gulp.dest('public/bootstrap'));
});
gulp.task('coffee', function() {
return gulp.src('lib/js/*.coffee')
.pipe(coffee())
.pipe(jsTransform())
.pipe(gulp.dest('public/js'));
});
你可以看到,我们将在多个任务中重用的 JavaScript 管道(JSHint + Uglify)拆分成了一个工厂。这些工厂可 以在任意多个任务中重用。你还可以嵌套工厂,并且可以将工厂链接在一起以获得更好的效果。拆分每个共享管道还可以为你提供一个中心位置,如果你决定更改工作流程,可以在此处进行修改。