vite创建react项目报错:TypeError: crypto.hash is not a function

4 阅读2分钟

今天在使用vite创建一个react项目,然后安装完依赖,在使用npm run dev启动的时候报了个错误,这里记录下错误以及解决过程。

报错信息如下:

error when starting dev server:
TypeError: crypto.hash is not a function
    at getHash (file:///C:/Users/vein_/Documents/MyProjects/pmnotes/node_modules/.pnpm/vite@7.0.0/node_modules/vite/dist/node/chunks/dep-Bsx9IwL8.js:2834:21)
    at getLockfileHash (file:///C:/Users/vein_/Documents/MyProjects/pmnotes/node_modules/.pnpm/vite@7.0.0/node_modules/vite/dist/node/chunks/dep-Bsx9IwL8.js:11716:9)
    at getDepHash (file:///C:/Users/vein_/Documents/MyProjects/pmnotes/node_modules/.pnpm/vite@7.0.0/node_modules/vite/dist/node/chunks/dep-Bsx9IwL8.js:11719:23)
    at initDepsOptimizerMetadata (file:///C:/Users/vein_/Documents/MyProjects/pmnotes/node_modules/.pnpm/vite@7.0.0/node_modules/vite/dist/node/chunks/dep-Bsx9IwL8.js:11180:53)
    at createDepsOptimizer (file:///C:/Users/vein_/Documents/MyProjects/pmnotes/node_modules/.pnpm/vite@7.0.0/node_modules/vite/dist/node/chunks/dep-Bsx9IwL8.js:34593:17)
    at new DevEnvironment (file:///C:/Users/vein_/Documents/MyProjects/pmnotes/node_modules/.pnpm/vite@7.0.0/node_modules/vite/dist/node/chunks/dep-Bsx9IwL8.js:35357:109)
    at Object.defaultCreateClientDevEnvironment [as createEnvironment] (file:///C:/Users/vein_/Documents/MyProjects/pmnotes/node_modules/.pnpm/vite@7.0.0/node_modules/vite/dist/node/chunks/dep-Bsx9IwL8.js:35776:9)
    at _createServer (file:///C:/Users/vein_/Documents/MyProjects/pmnotes/node_modules/.pnpm/vite@7.0.0/node_modules/vite/dist/node/chunks/dep-Bsx9IwL8.js:28359:132)
    at async CAC.<anonymous> (file:///C:/Users/vein_/Documents/MyProjects/pmnotes/node_modules/.pnpm/vite@7.0.0/node_modules/vite/dist/node/cli.js:573:18)
 ELIFECYCLE  Command failed with exit code 1.

package.json的内容如下:

{
  "name": "pm-test",
  "private": true,
  "version": "0.0.0",
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "tsc -b && vite build",
    "lint": "eslint .",
    "preview": "vite preview"
  },
  "dependencies": {
    "react": "^19.1.0",
    "react-dom": "^19.1.0"
  },
  "devDependencies": {
    "@eslint/js": "^9.29.0",
    "@types/react": "^19.1.8",
    "@types/react-dom": "^19.1.6",
    "@vitejs/plugin-react-swc": "^3.10.2",
    "eslint": "^9.29.0",
    "eslint-plugin-react-hooks": "^5.2.0",
    "eslint-plugin-react-refresh": "^0.4.20",
    "globals": "^16.2.0",
    "typescript": "~5.8.3",
    "typescript-eslint": "^8.34.1",
    "vite": "^7.0.0"
  }
}

第一反应就是自己的node版本太低了,用node -v看了下,是16的版本,赶紧用nvm升级到了18,然后删除掉node_modules,重新安装了依赖,再运行,还是报错。 没办法,只能去网上找下答案了,网上说最新的vite对于node的版本要求是20以上(可能是我落后了,我一直觉得18的版本已经是比较新的了,没想到现在24都出来了)。

最新版本的 vite 需要高版本 node

  "engines": {
    "node": "^20.19.0 || >=22.12.0"
  },

然后使用nvm直接安装了一个22版本,然后重新安装依赖并运行,运行成功!!!

参考文档node.js - 为什么使用Vite创建的项目在npm run dev时报错crypto.hash不是函数? - SegmentFault 思否