Error: error:0308010C:digital envelope routines::unsupported

1、前言

2024年11月某一天,升级了电脑上的nodejs版本:v22.11.0。
本来运行正常的Vue项目,在运行时突然就报错:Error: error:0308010C:digital envelope routines::unsupported

2、详细问题

前端项目启动(npm run dev)和打包时(npm run build:prod)报出如下错误:

PS D:\work\code\html\store-ui> npm run dev                                       

> LS@3.8.5 dev
> vue-cli-service serve

 INFO  Starting development server...
95% emitting CompressionPlugin ERROR  Error: error:0308010C:digital envelope routines::unsupported
Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:79:19)
    at Object.createHash (node:crypto:139:10)
    at D:\work\code\html\store-ui\node_modules\compression-webpack-plugin\dist\index.js:243:42
    at CompressionPlugin.compress (D:\work\code\html\store-ui\node_modules\compression-webpack-plugin\dist\index.js:284:9)
    at D:\work\code\html\store-ui\node_modules\compression-webpack-plugin\dist\index.js:305:12
    at _next1 (eval at create (D:\work\code\html\store-ui\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:14:17)
    at eval (eval at create (D:\work\code\html\store-ui\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:33:1)
    at D:\work\code\html\store-ui\node_modules\copy-webpack-plugin\dist\index.js:91:9

问题重点在【 at new Hash (node:internal/crypto/hash:79:19)
at Object.createHash (node:crypto:139:10)】这两行,创建hash失败。

主要是Node.js 17 引入了对 OpenSSL 3.0 的支持,该版本对于一些 API 进行了重大更改,这可能导致与某些 Node.js 库或依赖项的不兼容。

因此我们可选择将nodejs版本回退到17以下,比如16、13、10等。

3、解决方法

  • nodejs版本降级
  • 针对openssl设置环境变量

3.1、nodejs版本降级

我的电脑当前版本是v22,可以降级到16及以下版本,正好是windows电脑,可以在系统变量里修改nodejs的路径配置(当然也可以使用nvm来切换版本)。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2、针对openssl设置环境变量

windows电脑上,在Idea打开一个Terminal(终端),输入:

 SET NODE_OPTIONS=--openssl-legacy-provider 

$env:NODE_OPTIONS="--openssl-legacy-provider"

3.3、在package.json命令里添加设置

在原有的命令上,增加【SET NODE_OPTIONS=–openssl-legacy-provider 】配置,使用&& 连接

  "scripts": {
    "dev": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",
    "build:prod": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build"
  }

4、效果

最后 npm run dev 重新运行项目即可
在这里插入图片描述

### 解决方案概述 报错 `Error: error:0308010C:digital envelope routines::unsupported` 的根本原因是 Node.js v17 版本引入了 OpenSSL 3.0,而 OpenSSL 3.0 对加密算法和密钥大小施加了更严格的限制[^2]。以下是几种常见的解决方案: --- #### **方法一:设置环境变量** 通过配置环境变量来启用旧版的 OpenSSL 提供程序。 对于 Linux 和 macOS 用户,在终端执行以下命令: ```bash export NODE_OPTIONS=--openssl-legacy-provider ``` 对于 Windows 用户,在命令提示符或 PowerShell 中执行以下命令之一: ```cmd set NODE_OPTIONS=--openssl-legacy-provider ``` 或者在 PowerShell 中使用: ```powershell $env:NODE_OPTIONS="--openssl-legacy-provider" ``` 此方法适用于临时解决问题的情况,无需修改全局配置文件[^1]^。 --- #### **方法二:永久化环境变量** 为了使上述更改生效于每次启动系统时,可以通过操作系统级别的环境变量管理工具将 `NODE_OPTIONS` 设置为 `--openssl-legacy-provider`。 - **Windows**: 打开“高级系统设置”,进入“环境变量”界面,新增一个名为 `NODE_OPTIONS` 的系统变量,并将其值设为 `--openssl-legacy-provider`。 - **Linux/macOS**: 编辑用户的 shell 配置文件(如 `.bashrc`, `.zshrc`),添加如下内容: ```bash export NODE_OPTIONS=--openssl-legacy-provider ``` 保存后重启终端即可应用新设置[^3]^。 --- #### **方法三:降级 Node.js 到兼容版本** 如果无法接受长期依赖 `--openssl-legacy-provider` 参数,则可以选择卸载当前使用的高版本 Node.js (v17+) 并重新安装较低版本(例如 v16 LTS)。这通常被认为是一劳永逸的方法,因为低版本 Node.js 使用的是较早版本的 OpenSSL,不会受到该问题的影响[^5]^。 下载地址可访问官方站点 https://nodejs.org/ 下载对应稳定版本。 --- #### **方法四:升级项目中的依赖库** 部分情况下,项目的某些第三方模块可能未完全适配最新的 OpenSSL 政策。因此建议更新所有 npm/yarn 包至最新状态,尤其是涉及 SSL/TLS 功能的部分。运行以下命令完成操作: ```bash npm update --depth 999 # 或者如果你使用 yarn yarn upgrade ``` 此外还可以考虑迁移到支持更高安全标准的新框架或插件组合[^4]^。 --- ### 总结 推荐优先尝试调整环境变量的方式解决短期需求;而对于生产环境中部署的应用服务来说,评估是否有必要切换到更加稳定的 Node.js 发布分支可能是更好的选择。 ---
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青花锁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值