解决 “crypto.hash is not a function”:Vite 从 6.x 升级至 7.x 后 `pnpm run dev` 报错问题
🚀 作者主页: 有来技术
🔥 开源项目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template
🌺 仓库主页: GitCode︱ Gitee ︱ Github
💖 欢迎点赞 👍 收藏 ⭐评论 📝 如有错误敬请纠正!
目录
- 问题描述
- 原因分析
- 核心问题:Node.js 版本不兼容
- 解决方案
- ✅ 方案一:升级 Node.js 至合规版本(推荐)
- ⚠️ 方案二:降级 Vite 至 6.x(临时方案)
- 技术决策建议
问题描述
将 Vite 从 6.x 升级至 7.x 后,执行 pnpm run dev
时出现以下错误:
error when starting dev server:
TypeError: crypto.hash is not a function
原因分析
核心问题:Node.js 版本不兼容
- Vite 7 的依赖变更:Vite 7 内部使用
crypto.hash()
等现代 Web Crypto API,该特性仅在 Node.js 20.19.0+ 或 22.12.0+ 中稳定支持。 - Node.js 21 的定位问题:
- 21.x 属于非 LTS 版本(奇数版本为实验性分支),API 稳定性低于 LTS 版本。
- 在 Node.js 21 中
crypto.hash()
未完全实现或存在兼容性差异。
解决方案
✅ 方案一:升级 Node.js 至合规版本(推荐)
- 安装符合要求的 Node.js 版本:
# 使用 nvm 切换版本(推荐) nvm install 22.12.0 nvm use 22.12.0
- 验证 Node.js 版本:
node -v # 应输出 v22.12.0 或更高
- 重新安装依赖并启动:
pnpm install && pnpm run dev
⚠️ 方案二:降级 Vite 至 6.x(临时方案)
修改 package.json
锁定 Vite 版本至 6.x 最新补丁版本,清除缓存并重新安装依赖。
技术决策建议
从技术演进角度,升级 Node.js + 保留 Vite 7 是最优路径。Node.js 22 作为 LTS 版本(2023 年 10 月发布)已修复大量安全漏洞,并原生支持 ES2025 特性集。若项目需长期维护,应优先保障基础设施的现代性。