为什么 npm run serve 正常,npm run build 就报错:digital envelope routines::unsupported

这个错误通常与 Node.js 版本和使用的加密算法有关。让我解释一下原因和可能的解决方案:

错误原因

这个错误("error:0308010C:digital envelope routines::unsupported")通常发生在以下情况:

  1. 使用较新版本的 Node.js(通常是 Node.js 17 及以上版本)。
  2. 项目或某些依赖项使用了旧版本的加密算法,这些算法在新版 Node.js 中默认被禁用了。

在开发环境(npm run serve)中不报错,而在构建时(npm run build)报错的原因可能是:

  • 开发服务器可能使用了不同的 Node.js 配置或环境变量。
  • 构建过程可能触发了使用旧加密算法的代码路径。

解决方案

以下是几种可能的解决方案:

1. 降级 Node.js 版本

如果可能,将 Node.js 降级到 16.x 版本可能会解决这个问题。

2. 设置环境变量

在运行构建命令之前,设置以下环境变量:

复制代码
export NODE_OPTIONS=--openssl-legacy-provider

或者在 Windows 上:

复制代码
set NODE_OPTIONS=--openssl-legacy-provider

然后再运行 npm run build

3. 修改 package.json

package.json 文件中修改构建脚本:

json 复制代码
{
  "scripts": {
    "build": "cross-env NODE_OPTIONS=--openssl-legacy-provider vue-cli-service build"
  }
}

注意:你可能需要安装 cross-env 包来确保这在不同操作系统上都能工作。

4. 更新依赖

检查并更新项目依赖,特别是与加密相关的包。有时,更新到最新版本可以解决兼容性问题。

5. 检查 Webpack 配置

如果你的项目使用 Webpack,检查 Webpack 配置文件中是否有使用旧加密算法的设置。可能需要更新或调整这些设置。

建议

  1. 首先尝试设置环境变量或修改 package.json 中的构建脚本,这通常是最简单的解决方案。
  2. 如果问题仍然存在,考虑更新项目依赖或检查 Webpack 配置。
  3. 作为长期解决方案,考虑将项目迁移到支持新版 Node.js 的依赖版本。
相关推荐
Csvn1 小时前
原型链、this 与闭包内存:三座深水区一次打通(含内存泄漏排查实战)
前端·javascript
葡萄城技术团队2 小时前
如何通过 JSON 数据源 / Web API 快速构建轻量级报表(Report)?
前端·json·原型模式
浪兎兎2 小时前
【Java Web】Servlet + JSP 笔记
java·前端·servlet
Patrick_Wilson3 小时前
iOS Safari Clipboard API 权限弹窗问题
前端·ios·safari
OpenTiny社区3 小时前
Naive UI × GenUI SDK:自定义物料库搭建实战
前端·ai编程
kyriewen4 小时前
我拿 4 个真实前端任务试了 GLM-5.3 Flash:代码一遍跑通,账单 4 分钱
前端·程序员·ai编程
IT_陈寒4 小时前
Vue的响应式更新有时候真的不听话
前端·人工智能·后端
风骏时光牛马4 小时前
AI编程常见问题梳理与要点解析
前端
前端snow4 小时前
ai agent -- LCEL 汇总
前端
计算机魔术师4 小时前
NVIDIA 季度营收指引达 1080 亿美元,首次突破单季千亿大关
前端