環境・前提
- webpacker 3.5.5
- React
- rails
今関わっているプロジェクトでは、以下のような感じでDefinePlugin
とNODE_ENV
を使って、APIのURLなどの環境毎に異なるものを設定しています。
let apiUrl = '';
switch(env.NODE_ENV) {
case 'staging':
apiUrl = 'http://staging.com';
break;
case 'production':
apiUrl = 'http://production.com';
break;
default:
apiUrl = 'http://localhost:3000';
break;
}
module.exports = {
・・・
plugins: [
new webpack.DefinePlugin({
'apiUrl': JSON.stringify(apiUrl),
}),
],
・・・
};
webpacker3.5.5にアップデートしてハマったこと
bundle exec rake webpacker:compile NODE_ENV=staging
を実行しても NODE_ENV=production
で実行されてしまう。
これでは、stagingでもapiのURLが本番用になってしまうので、動作確認できない・・・
原因
ソースコードを見ると常にproduction
で実行されるようです・・・。
↓v3.5.5のwebpacker:compile
namespace :webpacker do
desc "Compile JavaScript packs using webpack for production with digests"
task compile: ["webpacker:verify_install", :environment] do
Webpacker.with_node_env("production") do
ensure_log_goes_to_stdout do
if Webpacker.compile
# Successful compilation!
else
# Failed compilation
exit!
end
end
end
end
end
対策
とりあえず、RAILS_ENV
の値を使うようにして逃げた。
env.NODE_ENV
を env.RAILS_ENV
に変更。