为什么 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 的依赖版本。
相关推荐
用泥种荷花9 分钟前
【LangChain学习笔记】创建智能体
前端
再吃一根胡萝卜13 分钟前
在 Ant Design Vue 的 a-table 中将特定数据行固定在底部
前端
掘金安东尼37 分钟前
Vercel:我们为 React2Shell 发起了一项价值 100 万美元的黑客挑战
前端·javascript·github
掘金安东尼40 分钟前
浏览器处理Base64数据的速度有多快?
前端·javascript·github
掘金安东尼41 分钟前
为不同场景设计多样化的页面过渡动画
前端·javascript·github
elangyipi1231 小时前
2025 搜索优化新革命:GEO 正在悄然取代 SEO?
前端·人工智能
持续升级打怪中1 小时前
深入解析深浅拷贝:原理、实现与最佳实践
开发语言·前端·javascript
我有一棵树1 小时前
空值合并运算符 ?? ,|| 的替代方案
前端·javascript
Apifox1 小时前
Apifox 12 月更新| AI 生成用例同步生成测试数据、接口文档完整性检测、设计 SSE 流式接口、从 Git 仓库导入数据
前端·后端·测试
禾叙_1 小时前
【NIO】ByteBuffer
前端·html·nio