メモブログ

技術的なことを書き連ねるブログ

gulpで引数によって処理を分けたい

例えば、引数によって開発環境ではjsをそのまま、本番環境ではminifyする。
などしたい場合。

gulplife.coffee

############
# module
############

gulp = require 'gulp'
coffee = require 'gulp-coffee' # coffeescriptを書くのに必要
uglify = require 'gulp-uglify' # ファイルをminify
gulpIf = require 'gulp-if' # 条件文を使えるようにする
minimist = require 'minimist' # タスクに引数を渡せる


############
# path
############

paths =
  assets: "./src/root/assets"
  assets2: "../htdocs/assets"

############
# 変数
############

# 引数をタスクに渡す
knownOptions =
  string: 'env'
  default:
    env: process.env.NODE_ENV || ''  #ここでデフォルト値を設定できる

options = minimist(process.argv.slice(2), knownOptions)

############
# タスク
############
gulp.task 'coffee',()->
  gulp.src paths.assets + '/js/**/*.coffee', { sourcemaps: true }
  .pipe coffee({ bare: true })
  .pipe gulpIf(!(options.env is 'dev'), uglify())
  .pipe gulp.dest(paths.assets2 + '/js')

重要なのは、「gulpIf」と「minimist」 です。
gulpIfはタスクのpipeの中で、if文が使えるというもの。
minimistは、コマンドラインを叩くときの引数をパースしてオブジェクトとして返してくれる。

引数を付け忘れる、なにも付けないとき -> minifyされる

$ gulp coffee

引数にdevをつける -> minifyされない

$ gulp coffee --env dev

引数にdev以外をつける -> minifyされる

$ gulp coffee --env production

【参考サイト】
CLIから引数を渡す | gulp 日本語リファレンス | js STUDIO