📖
Webpackerを3系から5系までアップデートした時のメモ
はじめに
Webpackerのバージョンをあげる機会があって、意外と困ったことがあったのでその時の備忘録。
アップデート手順
以下の手順で進めていきます。
- CHANGELOGをざっと見る
- Webpacker3から4にあげる
- bin/webpack-dev-serverやrailsサーバーのコンソールでエラーが出ていないことを確認する
- Webpacker4から5にあげる
- bin/webpack-dev-serverやrailsサーバーのコンソールでエラーが出ていないことを確認する
CHANGELOGを確認する
まずはCHANGELOGを確認して、Breaking changeがないか確認します。
また、バージョン3から4にあげる際はWebpacker Upgrade Guideも確認しましょう。
Webpacker3から4にあげる
gemfileでバージョンを固定して一気に5系に上がらないようにします。
Gemfile
gem 'webpacker', '~> 4'
bundle updateを実行すします。
$ bundle update webpacker
次にwebpackerを再インストールします。
設定ファイルを上書きするか聞かれるので、とりあえずYで上書きしていきます。
$ rails webpacker:install
warning package.json: No license field
warning No license field
conflict config/webpacker.yml
Overwrite /Users/yappu/dev/fss-media/config/webpacker.yml? (enter "h" for help) [Ynaqdhm] Y
force config/webpacker.yml
再インストールが終わったら上書きされたファイルを確認して、必要な設定が戻しておく必要があるのでdiffを確認して見てください。
プロジェクトによって異なると思いますが、今回はReactを使っていたので以下のコマンドも実行します。
$ rails webpacker:install:react
3から4へのアップデートでは設定ファイルを置き換える必要があるので注意してください。
置き換えが終わったら.babelrc
と.postcssrc.yml
は削除して大丈夫です。
この辺はWebpacker Upgrade Guideを読んでみてください。
.babelrc → babel.config.js
.postcssrc.yml → postcss.config.js
これでアップデート作業は完了です。
bin/webpack-dev-serverやrailsサーバーのコンソールでエラーが出ていないことを確認する
bin/webpack-dev-server
を実行するとエラーになりました。
$ bin/webpack-dev-server
/rails_app/node_modules/webpack-cli/bin/utils/prompt-command.js:46
return func(...args);
^
TypeError: Class constructor ServeCommand cannot be invoked without 'new'
これはwebpack-dev-server
のバージョンが新しすぎて起きているエラーみたいなので(参考)、バージョンダウンして対応します。
@webpack-cli/serve
も必要ないので削除します。
package.json
"@webpack-cli/serve": "^1.7.0", # 削除
"webpack-dev-server": "^4.9.3" # 削除
"webpack-dev-server": "^3" # 追加
これでエラーが出なくなりました。
$ bin/webpack-dev-server
...
Compiled successfully.
Webpacker4から5にあげる
上と同じことをもう一度繰り返せばOKです。
特にエラーが出ることなくアップデートできました。
Discussion