かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

Gulp タスクの呼び出し元によって、タスク内の処理を変えたい。

Gulpでタスクを実行していて、同じような処理だけど開発環境の時と本番リリース用でオプションを変更したいとかがあります。
開発環境用のタスクと、本番用のタスクとで別にタスクを書けば済む話なのですが、同じような記述が増えてしまうのが少しなんだかなーです。なので!タスクの実行関数内で実行元を判別して処理を分けられないか調べてみました。

this.seq というプロパティで判別できた!

'run-sequence'を使ってタスクを実行、実行されたタスク関数内のthisを調べた所this.seqというプロパティに配列が入っており、この配列内に実行元のタスク名が文字列で入っていました。 この値を利用して判別する事ができそうです。
非推奨になっているgulp.run()で実行してみてもthis.seqは存在したので、今の所このプラグイン以外でも大丈夫なんじゃないか?と思っています。

// gulpfile.js
var gulp        = require("gulp"),
    jade          = require("gulp-jade"),
    runSequence = require('run-sequence');

gulp.task('jade', function(cb) {
  var option = {
    pretty: true
  };

  // production から実行された時は html をmin化する
  console.log('this.seq:', this.seq);
  if( this.seq && this.seq.indexOf('production') >= 0 ) {
    option.pretty = false
  }

  return gulp.src(['jade/*.jade'])
    .pipe(plumber())
    .pipe(jade(option))
    .pipe(gulp.dest('html/'));
}):

gulp.task('dev', function(cb) {
  runSequence('jade', cb);
});
gulp.task('production', function(cb) {
  runSequence('jade', cb);
});
$ gulp dev 

とすると、コンパイルされたHTMLはmin化されません。

$ gulp production

とすると、jadeのコンパイルオプションが変更されmin化されたHTMLが出力されます。

感想

this.seqという値が変更になって、いつ無くなってしまうか解らないってリスクが有りますが、
この方法を使えば同じタスクで呼び出し元によってオプションを変更するとかができるので、同じようなgulp.task〜をたくさん書かなくても済みそうです。
正しい判別方法が有るのであれば教えて下さい☆  


現場のプロが教えるHTML+CSSコーディングの最新常識 知らないと困るWebデザインの新ルール4

現場のプロが教えるHTML+CSSコーディングの最新常識 知らないと困るWebデザインの新ルール4

あ。田舎って本当に仕事が無いって事を思い知っています。冗談抜きに収入が0だぞ!
C88で頒布した同人誌とグッズが委託されてます。

(☝´ڡ`)☝ よろしくお願いします!!
COMIC ZIN新宿店は東京に居た時大好きだった本屋さんなので置いてもらえてとても嬉しい!
店頭で見かけたらTwitterとかで教えて下さい。テンションが上ります☆