为什么 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 的依赖版本。
相关推荐
小飞悟5 分钟前
你以为 React 的事件很简单?错了,它暗藏玄机!
前端·javascript·面试
中微子12 分钟前
JavaScript 事件机制:捕获、冒泡与事件委托详解
前端·javascript
Whoisshutiao28 分钟前
网安-XSS-pikachu
前端·安全·网络安全
惊鸿28734 分钟前
Taro3+小程序Canvas动态生成海报和二维码分享到朋友圈
前端
做梦都在学习前端41 分钟前
发布一个monaco-editor 汉化包
前端·npm·vite
石小石Orz1 小时前
为什么推荐前端学习油猴脚本开发?
前端
珵煜ini1 小时前
wd-button组件阻止事件冒泡的
前端
炒毛豆1 小时前
vue3.4中的v-model的用法~
前端·vue.js
用户40812812003811 小时前
大文件分片上传和断点续传
前端
极客悟道1 小时前
颠覆传统虚拟化:在Docker容器中运行Windows系统的开源黑科技
前端·后端