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
- 作者: 大竹孔明,小川裕之,高梨ギンペイ,中江亮,株式会社まぼろし
- 出版社/メーカー: エムディエヌコーポレーション
- 発売日: 2015/03/25
- メディア: 単行本
- この商品を含むブログを見る
あ。田舎って本当に仕事が無いって事を思い知っています。冗談抜きに収入が0だぞ!
C88で頒布した同人誌とグッズが委託されてます。
(☝´ڡ`)☝ よろしくお願いします!!
COMIC ZIN新宿店は東京に居た時大好きだった本屋さんなので置いてもらえてとても嬉しい!
店頭で見かけたらTwitterとかで教えて下さい。テンションが上ります☆