webpack でビルド中に Cannot find module ‘v8-compile-cache’ というエラーが起きた時の対応

初めに、根本的な解決策ではないので読むだけ無駄かもしれない。

起きた事

開発環境で問題なくビルドができたので、別サーバーで同じファイルを用意してビルドを行った。
そしたら Cannot find module 'v8-compile-cache' というエラーが起きた。

ビルドツールは webpack を使用。

単純に npm install v8-compile-cache をすればいいという話でもなく、
どこかのパッケージ内で必要なパッケージが見つからないというよく分からないエラーが起きた。

原因

nodebrew にて node のバージョンを v15x系 → v16x系 に引き上げた。
また、 package.json で管理しているパッケージのバージョンが古かったので全て最新にした。
メジャーバージョンを変更したパッケージもあった。
おそらく、このへんが原因なのではないかと思う。

解決策

冒頭にもあるけど、根本的な解決策ではなく、
単純に package-lock.json と node_modules を別の名前に変え、
新しい node_modules を用意し、 npm install から行った。

package-lock.json なしで npm install するのが中々怖かったけど、
開発環境でビルドできていたし、多分大丈夫だろうと判断した。

$ cd /path/to/your/project

# 名前を変更
$ mv package-lock.json _package-lock.json
$ mv node_modules _node_modules

# ディレクトリ作成
$ mkdir node_modules

# インストール
$ npm install

# ビルド
$ webpack --mode=production

# 上手くビルドできたら削除
$ rm -f _package-lock.json
$ rm -rf _node_modules

もしかしたら ci で解決してたかもしれない

$ cd /path/to/your/project
$ npm ci
$ webpack --mode=production