はじめに
Angular 10 から Angular 17 へアップグレードしたところ、テスト実行時にこのようなメッセージが出力されました。
BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.
This is no longer the case. Verify if you need this module and configure a polyfill for it.If you want to include a polyfill, you need to:
- add a fallback 'resolve.fallback: { "timers": require.resolve("timers-browserify") }'
- install 'timers-browserify'
If you don't want to include a polyfill, you can use an empty module like this:
resolve.fallback: { "timers": false }
このメッセージが出力されないように直していきます。
原因
Webpack 5から、Node.jsコアモジュールのポリフィルが含まれなくなりました。上記のメッセージはそれについての警告です。
「timers
ないけどどないすんの?」
どうしましょうか?
「timers
つこてるなら、timers-browserify
インストールして、resolve.fallback で参照せえや。いらんのやら resolve.fallback に false と書いたらええ」
えー。わかんない。
自分の場合の問題箇所
自分の場合、xml2js が、内部でtimers
使っているのが原因でした。
Angular 全然関係ない話題っすね。
自分の場合の解決策
使用箇所も少なかったので、xml2jsをやめて fast-xml-parserを使うように書き換えました。
感想
Webpack の深い森へ入らずに解決できてよかったです。
以前のAngularは、Webpackの設定を内部で生成していたので、そこに何らかの設定を加えるには、ビルダーごと入れ替えなければいけませんでした。
Angular 17時代は、どうやるのが正当な道なのかな?