为什么 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 的依赖版本。
相关推荐
Jay丶7 分钟前
聊聊入职新公司两个月,试用期没过这件事
前端·面试
ZTeam前端全栈进阶圈10 分钟前
Vue新技巧:<style>标签里的 CSS 也能响应式!
前端
ღ_233311 分钟前
vue3二次封装element-plus表格,slot透传,动态slot。
前端·javascript·vue.js
摸着石头过河的石头15 分钟前
JavaScript继承的多种实现方式详解
前端·javascript
ybb_ymm18 分钟前
前端开发之ps基本使用
前端·css
Ashley的成长之路20 分钟前
NativeScript-Vue 开发指南:直接使用 Vue构建原生移动应用
前端·javascript·vue.js
衿璃20 分钟前
Flutter应用架构设计的思考
前端·flutter
朕的剑还未配妥20 分钟前
Vue 2 响应式系统常见问题与解决方案(包含_demo以下划线开头命名的变量导致响应式丢失问题)
前端·vue.js
JNU freshman1 小时前
Element Plus组件
前端·vue.js·vue3
一只专注api接口开发的技术猿1 小时前
容器化与调度:使用 Docker 与 K8s 管理分布式淘宝商品数据采集任务
开发语言·前端·数据库