ストリームfactoryを使用したストリームの共有
もし複数のタスクで同じプラグインを使用する場合、あなたはDRYの精神に従う方法について考えるかもしれません。 ここで紹介する方法は、一般的に使用されるストリームチェインを分割するファクトリーを作成するものです。
これを実現するために、lazypipeを使用します。
下記は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');
// give 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)を、 ファクトリーへ分離していることに気づくでしょう。 ファクトリーは、必要に応じて多くのタスクで再利用可能なものにしてくれます。 また、ファクトリーを入れ子にすることも、チェーンすることも可能で、 これは非常に効果的です。 共有されるパイプラインを分離することは、ワークフローの変更を決定した際に、 修正箇所を一箇所にしてくれるというメリットももたらしてくれます。
© 2010 - 2017 STUDIO KINGDOM