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 重新运行项目即可
在这里插入图片描述

### 解决 Node.js 中 `Error: error:0308010C:digital envelope routines::unsupported` 的方法 当在 Node.js 环境中遇到该错误时,可以采取多种方式来解决这一问题。以下是几种有效的解决方案: #### 设置环境变量 通过设置环境变量 `NODE_OPTIONS=--openssl-legacy-provider` 可以启用 OpenSSL 的旧版提供程序,从而避免此错误的发生[^1]。 对于 Windows 用户,在命令提示符下可以通过以下命令临时设置环境变量: ```cmd set NODE_OPTIONS=--openssl-legacy-provider ``` 而对于 Unix 或 macOS 用户,则可以在终端执行下列指令: ```bash export NODE_OPTIONS=--openssl-legacy-provider ``` #### 修改项目配置文件 另一种常见做法是在项目的 `package.json` 文件内的脚本部分加入特定参数。例如,如果使用的是 React 应用程序,那么可以在 `scripts` 字段内添加启动命令选项: ```json { "name": "...", "version": "...", "private": true, "dependencies": { ... }, "scripts": { "start": "react-scripts --openssl-legacy-provider start" } } ``` 这会使得每次运行 `npm start` 命令时自动加载所需的 OpenSSL 参数[^2]。 如果是 Vue CLI 构建的应用程序,也可以按照相似的方式调整 `package.json` 配置: ```json { "scripts": { "serve": "set NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve", "build": "vue-cli-service build" } } ``` 注意这里针对不同操作系统可能需要适当修改语法结构;比如 Linux 和 MacOS 下应去掉 `set` 关键字并改用分号隔开多条语句[^3]。 #### 使用 NVM 切换 Node 版本 考虑到某些情况下更新后的高版本 Node.js 更容易触发此类兼容性问题,利用 nvm(Node Version Manager) 来切换到较低稳定版本也是一种可行的选择。先确认已安装哪些可用节点版本及其默认选用情况: ```bash nvm ls ``` 接着卸载有问题的新版本(假设为 v17.x),再重新指定一个更早些但稳定的发行版作为工作区中的主要依赖项: ```bash nvm uninstall 17.x.x nvm install lts/* ``` 最后记得重启应用程序验证更改效果[^4]。 上述措施均有助于缓解乃至彻底消除因加密库差异而导致的功能异常现象。具体实施哪一种取决于实际开发场景和个人偏好等因素影响下的综合考量结果。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

青花锁

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

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

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

打赏作者

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

抵扣说明:

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

余额充值