🐈
nuxt を build している時に出る hard source plugin のエラーの対処方法
[忘備録]
nuxt の build を行っていると、以下のようなエラーが発生する時がある。
ERROR [hardsource:xxxx] Could not freeze ./xxxxx.js: Cannot read property 'hash' of undefined
これは Webpack plugin の hard-source-webpack-plugin が起こしているエラー。
hard-source-webpack-plugin 自体は build の内容を cache して、次回以降の build を高速化してくれる webpack の plugin であり、重宝している。
しかし、この plugin, repository を見てもわかる通り、ここ数年間更新されてない。
上記エラーを解決する Pull Request 自体は 2019年から出ているが音沙汰が無い状態。
こういうメンテナーが動かない状態の時は更新を待っていても仕方ないので、patch-packageを使う
patch-package は node_modules
内の特定の package と npm から落としてこれる package に差分がある場合、その差分の patch を作成してくれるツール。
-
node_modules
の中のhard-source-webpack-plugin
にあるTransformNormalModulePlugin.js
を開いて、この Pull Request と同じ変更を加える - terminal で
patch-package hard-source-webpack-plugin
を実行する。これで patch ファイルが自動的に作成される。 -
package.json
のscripts
に"postinstall": "patch-package"
を追加する。
これで、npm install
、またはyarn install
する度に patch-package が起動し、hard-source-webpack-plugin に修正を加えてくれる。
これで nuxt build 時に上記のエラーが発生することはなくなる。
Discussion