MeWrite Docs

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)

原因

  1. Node.jsバージョンが古い: crypto.hash()はNode.js 21.7.0+で追加された
  2. Vite 7の要件: Vite 7.0はNode.js 20.19.0以上または22.12.0以上を要求
  3. LTSバージョンの互換性: Node.js 20の古いバージョンにはcrypto.hash()が存在しない

解決策

1. Node.jsをアップグレード(推奨)

1
2
3
4
5
6
7
# Node.js 22(LTS)にアップグレード
nvm install 22
nvm use 22

# または Node.js 20.19.0以上
nvm install 20.19.0
nvm use 20.19.0

2. nvmrcでバージョンを固定

1
2
# .nvmrc
22
1
2
# プロジェクトディレクトリで
nvm use

3. Vite 6にダウングレード

1
npm install vite@6

4. package.jsonでenginesを指定

1
2
3
4
5
{
  "engines": {
    "node": ">=20.19.0 || >=22.12.0"
  }
}

5. Dockerfileでバージョン指定

1
2
3
4
5
6
7
FROM node:22-alpine

WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm", "run", "dev"]

6. GitHub Actionsでバージョン指定

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '22'
      - run: npm install
      - run: npm run build

よくある間違い

  • Node.js 20.9.0などの古いLTSバージョンを使い続ける
  • pnpmの警告(pnpm approve-builds)を無視してesbuildのビルドスクリプトを実行しない
  • CI/CDのNode.jsバージョンを更新し忘れる

関連エラー

参考リンク

JavaScript の他のエラー

最終更新: 2025-12-13