为什么 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 的依赖版本。
相关推荐
qq_406176145 小时前
吃透JS异步编程:从回调地狱到Promise/Async-Await全解析
服务器·开发语言·前端·javascript·php
幻云20105 小时前
Python深度学习:筑基与实践
前端·javascript·vue.js·人工智能·python
@大迁世界5 小时前
停止使用 innerHTML:3 种安全渲染 HTML 的替代方案
开发语言·前端·javascript·安全·html
缘木之鱼5 小时前
CTFshow __Web应用安全与防护 第二章
前端·安全·渗透·ctf·ctfshow
沛沛老爹5 小时前
从Web到AI:多模态Agent Skills生态系统实战(Java+Vue构建跨模态智能体)
java·前端·vue.js·人工智能·rag·企业转型
子非鱼9215 小时前
Vue框架快速上手
前端·javascript·vue.js
winfredzhang5 小时前
从零构建:基于 Node.js 与 ECharts 的量化交易策略模拟系统
前端·node.js·echarts·股票·策略
We་ct5 小时前
LeetCode 380. O(1) 时间插入、删除和获取随机元素 题解
前端·算法·leetcode·typescript
LawrenceLan5 小时前
Flutter 零基础入门(二十三):Icon、Image 与资源管理
开发语言·前端·flutter·dart
津津有味道5 小时前
WEB浏览器网页读写Desfire EV1 EV2 EV3卡,修改DES、3DES、AES密钥JS源码JavaScript
前端·javascript·nfc·desfire·ev2·ev3·ev1