はじめに
タイトルの通り。
gulp タスクに .env
のようなファイルで定義した環境変数を渡したくて、
gulp-env と node-env-file を比較した。
結論としては node-env-file の方が使い勝手が良かった。
それぞれの使い方
node-env-file
// gulpfile.js var gulp = require('gulp'); var env = require('node-env-file'); env('.env'); gulp.task('default', function() { console.log(process.env.FOO); });
こんな感じ。.env
には
FOO=foo
としておくと gulp タスク側で process.env.FOO
で参照できる。
gulp-env
// gulpfile.js var gulp = require('gulp'); var env = require('gulp-env'); env({ file: '.env.json', vars: { // any variables you want to overwrite } }); gulp.task('default', function() { console.log(process.env.BAR); });
こう。
vars
はオプションで、指定しなくても良い。指定すると .env.json
の変数の内容をさらに上書きできる。(使いみちがわからず)
.env.json
はこのように JSON 形式で記述する。(json 以外のフォーマットも対応しているよう)
{ "BAR": "bar" }
node-env-file が gulp-env より優れていると感じた点
実行時に変数を上書きできる
node-env-file は gulp タスク実行時に
$ FOO=hoge gulp
とすることで、.env
に定義した変数を上書きすることができる。
### node-env-file の場合 $ gulp foo $ FOO=hoge gulp hoge ### gulp-env の場合 $ gulp bar # コマンド実行時に上書きできない $ BAR=hoge gulp bar
オプションで、.env ファイルが存在しなくてもエラーにならないようにすることができる
node-env-file には raise
というオプションがあって、これを false
にするとファイルが存在しなくてもエラーにしないことができる。
env('.env', { raise: false });
別解として
node-foreman をインストールするという手もある。
$ nf run gulp