"environment"が指すものがRAILS_ENVとNODE_ENVの2つあり、かつwebpackerはその両方を利用するのでわかりづらい。
config/webpacker.yml
RAILS_ENVに対応したキーの設定を使う
config/webpack/*.js
NODE_ENVに対応したキーのファイルを使う。のだけど注意点がある。
例えばNODE_ENV=staging
のときにはconfig/webpack/staging.jsを使う。その中で次のようにしていたとする。このとき、変数environmentに入るのはwebpackerがproduction用に用意した設定になる。
const environment = require('./environment') module.exports = environment.toWebpackConfig()
これは、webpackerが
- test,development,production用のデフォルト設定を用意している
- NODE_ENVがデフォルト設定のいずれかと同様であればそれを、どれでもなければproduction用のデフォルト設定を利用する
という仕様になっているから。このへんを見ると挙動がつかめるはず。
https://github.com/rails/webpacker/blob/d905149d8a33303a9c24002721bc872ef95a8b6f/package/env.js
NODE_ENVはどのように決まるか
./bin/webpackコマンドでコンパイルするときは、明示的にNODE_ENVを設定しないとdevelopmentになる
rails assets:precompile
やrails webpacker:compile
を実行したときは、明示的にNODE_ENVを設定しないとproductionになる
前はRAILS_ENVも見てなかったっけ?
https://github.com/rails/webpacker/pull/1359 で今の挙動に変わったらしい