TypeError: crypto.hash is not a function
Vite 7でNode.jsバージョンが古い場合に発生するエラー
概要
Vite 7.0以降で開発サーバーを起動する際、Node.jsのバージョンが古い場合に発生するエラーです。Vite 7はcrypto.hash()関数を使用しますが、この関数はNode.js 21.7.0以降で追加されました。
エラーメッセージ
error when starting dev server:
TypeError: crypto.hash is not a function
at getHash (file:///project/node_modules/vite/dist/node/chunks/dep-xxx.js:2834:21)
at getLockfileHash (file:///project/node_modules/vite/dist/node/chunks/dep-xxx.js:11716:9)
at getDepHash (file:///project/node_modules/vite/dist/node/chunks/dep-xxx.js:11719:23)
原因
- Node.jsバージョンが古い:
crypto.hash()はNode.js 21.7.0+で追加された - Vite 7の要件: Vite 7.0はNode.js 20.19.0以上または22.12.0以上を要求
- LTSバージョンの互換性: Node.js 20の古いバージョンには
crypto.hash()が存在しない
解決策
1. Node.jsをアップグレード(推奨)
| |
2. nvmrcでバージョンを固定
| |
| |
3. Vite 6にダウングレード
| |
4. package.jsonでenginesを指定
| |
5. Dockerfileでバージョン指定
| |
6. GitHub Actionsでバージョン指定
| |
よくある間違い
- Node.js 20.9.0などの古いLTSバージョンを使い続ける
- pnpmの警告(
pnpm approve-builds)を無視してesbuildのビルドスクリプトを実行しない - CI/CDのNode.jsバージョンを更新し忘れる
関連エラー
参考リンク
JavaScript の他のエラー
この記事は役に立ちましたか?