本文最后更新于 2025-03-03,文章内容可能已经过时。

当运行 npm run dev 启动 Vue 项目时,若出现以下错误:

Error: error:0308010C:digital envelope routines::unsupported

通常是由于 Node.js 17+ 版本默认使用 OpenSSL 3.0,而旧项目依赖的加密算法或构建工具未适配新版 OpenSSL,导致兼容性冲突‌。

解决方案

一、临时设置环境变量(推荐快速修复)

通过命令行直接注入环境变量,临时启用 OpenSSL 旧版提供程序:

# Windows

set NODE_OPTIONS=--openssl-legacy-provider && npm run dev

# Mac/Linux

export NODE_OPTIONS=--openssl-legacy-provider && npm run dev

‌优点‌:无需修改代码,快速生效。

‌缺点‌:每次启动均需重新执行命令‌。

二、修改项目配置(长期有效)

在 package.json 的 scripts 中永久添加 OpenSSL 兼容参数:

{
  "scripts": {
    "dev": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",
    "build": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build"
  }
}

‌注意‌:

Windows 使用 SET,Mac/Linux 需替换为 export‌

修改后需重新运行 npm install 确保配置生效‌。

三、降级 Node.js 版本(稳定方案)

若项目对 OpenSSL 3.0 依赖度低,可回退至 Node.js 16.x(LTS 版本):

使用 nvm 管理多版本:

# 安装 Node.js 16.x

nvm install 16.20.2

# 切换版本

nvm use 16.20.2

# 验证版本:

node -v

‌适用场景‌:需长期维护旧项目且无升级依赖计划‌。

四、升级项目依赖(根治方案)

若项目需长期维护,建议升级 Vue CLI 及相关依赖至适配 OpenSSL 3.0 的版本:

更新全局 Vue CLI:

npm update -g @vue/cli

更新项目依赖:

npm update

‌注意‌:需测试升级后功能是否正常,避免引入新问题‌。

其他注意事项

‌跨系统兼容性‌:

Windows 与 Mac/Linux 的环境变量语法差异需注意(SET vs export)‌。

‌版本管理工具‌:

推荐使用 nvm 或 n 管理 Node.js 版本,避免全局依赖冲突‌。

‌错误日志分析‌:

若问题未解决,检查 npm run dev --verbose 输出或 node_modules/.cache 中的日志文件‌。

总结

‌方案‌ ‌适用场景‌ ‌推荐指数‌

临时环境变量 快速调试、短期项目 ⭐⭐⭐⭐

修改 package.json 长期维护旧项目 ⭐⭐⭐⭐

降级 Node.js 版本 依赖严重冲突且无升级计划 ⭐⭐⭐

升级依赖 需适配新技术栈的长期项目 ⭐⭐⭐⭐

优先推荐‌修改项目配置‌或‌临时环境变量‌,平衡效率与稳定性。若需根治问题,建议结合依赖升级与版本管理‌。