「Module not found: Can't resolve 'xxx'」のビルドエラーがでる。
概要
ローカル(VSCODE)→GitHub→Vercel でデプロイまで行っていますが、いろいろ機能追加していた時に、Vercel でのビルド時に「Module not found: Can't resolve」が出るケースがあり。
一般的な対策として「npm run build」などで実行すれば、同様にエラーが出るケースがあるので、その手順でビルドのエラー内容を確認することで、問題点把握していましたが、例外として、ローカルでの「npm run build」では問題ないが、デプロイで NG が起きるケースあり。
いろんなケースありますが、「Can't resolve 'xxx'」が出た時は以下の対策が有効です。
原因
GitHub の使用で、ファイル名について「inputBox
」から「InputBox
」へ変更したとしても、変更したファイル名でコミット・プッシュされないという事象がある模様
確認方法として
Module not found: Can't resolve '@/components/inputBox'」
が出た時などは類似事例の可能性あり
GitHub 上でファイル名みるとInputBox
になっている
自分のローカル(VSCODE)上ではinputBox
になっているので、ローカル上では動く状態
ローカル「inputBox
」→GitHub「InputBox
」→Vercel「InputBox
」の状態になって、
Vercel 上での ビルド が「inputBox
」参照する状態になっているため失敗する模様。
対策
以下のように、一度リポジトリを削除して、再プッシュの手順もありそうですが、リスクありそうなだったので、ほかに方法ないか検討しました。
Vercel にデプロイ時のビルドエラー
結果しては、一度異なるファイル名でコミット・プッシュしたあと、
再度元のファイル名に変更してコミットすることで、期待通りになりました。
ほかにも、GitHub で大文字小文字で別ファイルとして扱う設定もある模様ですが、施行はしていません。
手順
以下の手順で対応できました。
- ローカルでファイル名をリネームする。
- ローカルでのコミット、GitHub へのプッシュ
- GitHub 上でファイル名変わっていること確認
- ローカルでファイル名をもとに戻す(正しい名前)
- ローカルでのコミット、GitHub へのプッシュ
- GitHub 上でファイル名変わっていること確認
「6」の作業で、GitHub 上でもファイル名正しい状態になったので、Vercel へのデプロイも問題なくなると思います。
具体的には以下の通り作業しました
- ローカルでファイル名をリネームする。
ファイル名を「inputBox.tsx
」から「inputBox2.tsx
」へ変更 - ローカルでのコミット、GitHub へのプッシュ
- GitHub 上でファイル名変わっていること確認
GitHub 上で「inputBox.tsx
」「InputBox.tsx
」がなくなって「inputBox2.tsx
」が新たにできていることを確認 - ローカルでファイル名をもとに戻す(正しい名前)
ファイル名を「inputBox2.tsx
」から「inputBox.tsx
」へ変更 - ローカルでのコミット、GitHub へのプッシュ
- GitHub 上でファイル名変わっていること確認
GitHub 上で「inputBox2.tsx
」がなくなって「inputBox.tsx
」が新たにできていることを確認
一度、「inputBox
」を削除し、プッシュすることで再度「inputBox
」を作成するという手順を踏みました。
これで、「Can't resolve」のビルドエラーは出なくなった模様
参考
Vercel にデプロイ時のビルドエラー
Github の設定変更
GitHub 上でも、設定次第で対策できそうな状況ですが、そこまで知識ないので・・・単純な手法にしました。
Discussion