nuxt を build している時に出る hard source plugin のエラーの対処方法

1 min read読了の目安(約1200字

[忘備録]

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.jsonscripts"postinstall": "patch-package"を追加する。

これで、npm install、またはyarn install する度に patch-package が起動し、hard-source-webpack-plugin に修正を加えてくれる。

これで nuxt build 時に上記のエラーが発生することはなくなる。