結論
Webpackのバージョンに対応していないパッケージが使われている可能性があります。
その場合はアップデートや代替のパッケージへ変更を行うと解消が期待できます。
今回の事象
ReactでCreate React Appを使ってプロジェクトを作成しました。
いくつかコンポーネントを作成した上で、Storybookを導入(npx sb init
)しました。
その上でビルド(npm run storybook
, npm run build-storybook
)しようとするとCannot read properties of undefined (reading 'tapAsync')
のエラーが発生して失敗しました。
原因
スタックトレースを読んでみると、エラーの発生箇所はreact-scripts
が依存しているfork-ts-checker-webpack-plugin-alt
というパッケージでした。
かなり古い状態で更新が止まっているのでWebpackの更新に追いついていないようです。
気づいたきっかけとしては、同じくスタックトレースに原因箇所として出ていたhtml-webpack-plugin
のGitHubのissueに基本原因が書かれていたからです。
This error means your plugin is not compatible with html-webpack-plugin 4.x
The error tells you also which plugin is incompatible:
TypeError: Cannot read property 'tapAsync' of undefined
at /Users/mypath/node_modules/html-webpack-preconnect-plugin/index.js:37:57So in this case html-webpack-preconnect-plugin has to upgrade to the new hooks:
TypeError: Cannot read property 'tapAsync' of undefined
のエラーが出た場合、プラグインがhtml-webpack-plugin 4.x
と互換性がないのでアップデートしてね、って感じのことを書いているようです。
つまりhtml-webpack-plugin
が悪いんじゃなくて、html-webpack-plugin
を使っているプラグインのパッケージが原因ってことですね。
対処
とりあえず今回のプロジェクトにインストールされていたreact-scripts
はバージョンが古かったので最新化しました。
最新化したところ、fork-ts-checker-webpack-plugin-alt
への依存自体が無くなったのでエラーも出なくなりました。
おそらくreact-scripts
のメンテナーがこの問題にどこかで気づいてメンテされてないパッケージへの依存を切ったのだと思います。