Spring Boot + npm + Geb で入力フォームを作ってテストする ( その97 )( webpack を 4.43.0 → 5.56.0 へバージョンアップする )
概要
記事一覧はこちらです。
- 今回の手順で確認できるのは以下の内容です。
- webpack を 4.43.0 → 5.56.0 へ、webpack-cli を 3.3.11 → 4.8.0 へバージョンアップします。
参照したサイト・書籍
To v5 from v4
https://webpack.js.org/migrate/5/TerserWebpackPlugin
https://webpack.js.org/plugins/terser-webpack-plugin/webpack-contrib / terser-webpack-plugin
https://github.com/webpack-contrib/terser-webpack-plugin#terseroptionsterser / terser
https://github.com/terser/terserwebpack@5の主な変更点まとめ
https://blog.hiroppy.me/entry/webpack5webpack 5 にアップグレードしました
https://medium.com/studist-dev/migration-webpack-from-4-to-5-3df31da8e7a2browserslist / browserslist
https://github.com/browserslist/browserslistCache
https://webpack.js.org/configuration/cache/#cachebuilddependencies
目次
- webpack を 4.43.0 → 4.46.0 へ、webpack-cli を 3.3.11 → 4.8.0 へバージョンアップする
- webpack を 4.46.0 → 5.56.0 へバージョンアップする
- uglifyjs-webpack-plugin を terser-webpack-plugin に変更する
- package.json に browserslist を追加する
- cache の設定を追加する
- 最後に各種コマンドや build で問題がないか確認する
手順
webpack を 4.43.0 → 4.46.0 へ、webpack-cli を 3.3.11 → 4.8.0 へバージョンアップする
To v5 from v4 の Upgrade webpack 4 and its plugins/loaders に webpack 4、webpack-cli を最新バージョンに上げるよう記述されているので、以下のコマンドを実行します。
npm install --save-dev webpack@4.46.0
npm install --save-dev webpack-cli@4.8.0
webpack を 4.46.0 → 5.56.0 へバージョンアップする
Make sure your build has no errors or warnings に記載されている
node --trace-deprecation node_modules/webpack/bin/webpack.js
を実行します。
mode は起動時オプションで指定するようにしているので、まずは node --trace-deprecation node_modules/webpack/bin/webpack.js --mode production
を実行してみると特に警告やエラーのメッセージは出力されませんでした。
次に node --trace-deprecation node_modules/webpack/bin/webpack.js --mode development
を実行してみますが、こちらもメッセージは何も出力されませんでした。
Test webpack 5 compatibility に記載されているオプションを webpack.config.js に追加してから、
module.exports = (env, argv) => { return { node: { Buffer: false, process: false, }, entry: { "js/inquiry/input01": ["./src/main/assets/js/inquiry/input01.js"], ..........
node --trace-deprecation node_modules/webpack/bin/webpack.js --mode production
コマンドを実行してみましたが、メッセージ等は表示されませんでした。webpack.config.js に追加したオプションは削除します。
問題ないようなので、以下のコマンドを実行し webpack を 5 の最新バージョンにバージョンアップします。
npm install --save-dev webpack@5.56.0
使用していない prettier-webpack-plugin に関するメッセージが出力されているので、以下のコマンドを実行して削除します。
npm uninstall --save-dev prettier-webpack-plugin
uglifyjs-webpack-plugin は後で削除するので、今はこのままにします。
npm run build
コマンドを実行すると webpack 5 に対応していない uglifyjs-webpack-plugin の設定を残している影響でエラーメッセージが大量に出力されます。
uglifyjs-webpack-plugin を terser-webpack-plugin に変更する
以下のコマンドを実行して uglifyjs-webpack-plugin をアンインストール、terser-webpack-plugin をインストールします。
npm uninstall --save-dev uglifyjs-webpack-plugin
npm install --save-dev terser-webpack-plugin@5.2.4
terser-webpack-plugin は uglifyjs-webpack-plugin とほぼ同じオプションが指定できるそうなので webpack.config.js の optimization を以下の内容に変更します。
const webpack = require("webpack"); const TerserPlugin = require("terser-webpack-plugin"); // --mode オプションで指定された文字列を参照したい場合には argv.mode を参照する module.exports = (env, argv) => { return { .......... optimization: { minimizer: [ new TerserPlugin({ terserOptions: { ecma: 5, output: { comments: false, }, compress: { dead_code: true, drop_console: true, }, }, }), ], }, .......... devtool: argv.mode === "production" ? false : "inline-source-map", }; };
const UglifyJsPlugin = require("uglifyjs-webpack-plugin");
→const TerserPlugin = require("terser-webpack-plugin");
に変更します。new UglifyJsPlugin({
→new TerserPlugin({
に変更します。uglifyOptions: {
→terserOptions: {
に変更します。- compress オプションの指定が
compress: true
とcompress: { ... }
の2つ書かれていたことに気づいたので、compress: true
の方を削除します。 - source map を生成するか否かは devtools の設定に依存するようになったので、
sourceMap: false
を削除します。 - production モードの場合には source map を生成しないよう
devtool: "inline-source-map"
→devtool: argv.mode === "production" ? false : "inline-source-map",
に変更します。
‘npm run build‘ コマンドを実行するとエラーメッセージは出なくなりました。
生成された js ファイルを見ると、~.LICENSE.txt というファイルも生成されるようになりました。
package.json に browserslist を追加する
Need to support an older browser like IE 11? を読むと package.json に browserslist を記述しておくと webpack 5 がコードスタイルを決めてくれるようになったそうです。https://github.com/postcss/autoprefixer を見ると autoprefixer も browserslist の設定を見てくれるようなので、package.json の最後に "browserslist": [ ... ]
を追加します。
.......... "browserslist": [ "last 1 version", "> 1%", "IE 11" ] }
postcss.config.js も以下のように変更します。
module.exports = { plugins: [ require("stylelint"), require("autoprefixer"), require("cssnano")({ preset: "default", }), ], };
require("autoprefixer")({ browserlist: ["last 2 versions"] }),
→require("autoprefixer"),
に変更します。
browserslist を追加する前は npx browserslist
コマンドを実行すると以下のように出力されますが、
追加した後は以下のよう変わりました。
cache の設定を追加する
webpack 5 からファイルシステムによるキャッシュが導入されて大幅に速度改善できるようになったとのことなので、設定を追加します。
webpack.config.js に cache を追加します。development 環境では有効、production 環境では無効にします。
output: { .......... }, cache: argv.mode === "production" ? false : { type: "filesystem", buildDependencies: { config: [__filename], }, }, resolve: { ..........
最後に各種コマンドや build で問題がないか確認する
最後にコマンド、build で問題がないか一通り確認します。
npm test
コマンドは問題ありません。
npm run build
コマンドも問題ありません。
clean タスク実行 → Rebuild Project 実行 → build タスク実行も問題ありません。
gebTest タスクも問題ありません。
履歴
2021/10/08
初版発行。