Error: error:0308010C:digital envelope routines::unsupported 解决方案

文章讲述了在使用若依开源项目时遇到的Node.jsV17与OpenSSL3.0兼容性问题,提供了三种解决方案:降级到Node.js16+,设置环境变量使每个启动请求自动带有--openssl-legacy-provider,以及在配置文件中永久设置该选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、报错

最近在研究开源项目若依,启动前端的时候报错,从报错很明显看出来是node版本问题

启动vue项目,报错如下:
在这里插入图片描述

2、报错原因

出现这个错误是因为 node.js V17版本中最近发布的OpenSSL3.0, 而OpenSSL3.0对允许算法和密钥大小增加了严格的限制,可能会对生态系统造成一些影响.

在node.js V17以前一些可以正常运行的的应用程序,但是在 V17 版本可能会抛出这个异常。

3、解决方案

3.1版本降级,解决报错

尝试卸载Node.js 17+版本并重新安装Node.js 16+版本,然后再重新启动

这个方法,测试有效,但我推荐的是第二个办法。

3.2设置参数,解决报错

在执行运行项目命令之前,先运行这个命令:

Linux & Mac OS:

 export NODE_OPTIONS=--openssl-legacy-provider 

windows命令提示符:

set NODE_OPTIONS=--openssl-legacy-provider 

这样就可以解决了,亲测有效。

唯一不足,是每次启动项目都要运行,所以,我们可以把它配置一下。也就是第三种方法。

3.3 修改配置文件,解决报错(推荐)

根据你的系统类型,选择一个上面的命令,如,我是Windows系统,我就用:

set NODE_OPTIONS=--openssl-legacy-provider 

然后,找到项目的package.json文件,把自己对应的命令,加上&&,写到启动项目的配置里面(构建写不写都可以),即可。

例1:脚手架

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

例2:Vue-Element-Admin

 "scripts": {
    "dev": "set NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",
//略...
  },

致谢

版权声明:本文为优快云博主「藏蓝色攻城狮」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/m0_48300767/article/details/131450325

<think>好的,我现在要解决用户遇到的错误“ERROR Error: error:0308010C:digital envelope routines::unsupported”。首先,我需要理解这个错误的原因。用户可能是在运行某个Node.js项目时遇到了这个问题。根据经验,这种错误通常和OpenSSL版本有关,尤其是在Node.js v17及以上版本中,默认使用了OpenSSL 3,而某些旧的库或项目可能不兼容。 接下来,我需要确认用户的环境。假设用户使用的是Node.js v17或更高版本,那么问题可能出在加密算法上。例如,一些项目可能依赖旧版的OpenSSL 1.x中的算法,而这些在OpenSSL 3中被移除了。这时候,Node.js就会抛出这个错误。 然后,我需要考虑可能的解决方案。常见的解决办法有几种: 1. 降级Node.js到v16或更低版本,因为这些版本使用OpenSSL 1.1.1,兼容性更好。但这种方法不太推荐,因为升级Node.js通常更好。 2. 设置环境变量NODE_OPTIONS=--openssl-legacy-provider,这样可以让Node.js使用旧的加密提供者。这可以通过在运行命令前加上这个变量来实现,或者在package.json的脚本里设置。 3. 更新项目的依赖,确保所有模块都兼容OpenSSL 3。这可能涉及到检查是否有过时的包,并升级它们,或者寻找替代方案。 现在,我需要验证这些方法是否有效。例如,用户如果是在运行npm脚本时出现错误,可以临时在命令前加上环境变量,比如: ``` NODE_OPTIONS=--openssl-legacy-provider npm run dev ``` 如果这样解决了问题,说明确实是OpenSSL版本的问题。这时候,用户可以选择永久设置环境变量,或者修改启动脚本。 另外,需要考虑跨平台的情况。在Windows系统下,设置环境变量的方式可能不同,比如使用set命令或者在PowerShell中设置。用户可能需要根据不同的操作系统调整命令。 同时,提醒用户更新依赖的重要性。虽然设置环境变量是快速解决方案,但长期来看,保持依赖库的更新可以避免未来出现类似的问题。例如,使用npm outdated检查过时的包,然后逐一升级,或者使用工具如npm-check-updates来辅助更新。 最后,需要确保用户清楚每个步骤的风险。例如,降级Node.js可能会影响其他项目,而使用legacy provider可能带来安全风险,因此建议在开发环境中使用,生产环境应尽量更新依赖。 总结下来,用户的问题可能由Node.js版本升级导致,解决方法是调整环境变量或更新项目依赖。需要根据具体情况选择最合适的方案,并注意潜在的影响。</think>**ERROR Error: error:0308010C:digital envelope routines::unsupported** 是 Node.js 中常见的加密相关错误,通常与 OpenSSL 版本不兼容有关。以下是逐步分析和解决方案: --- ### **错误原因** 1. **Node.js 版本升级**(v17+)默认使用 OpenSSL 3.x,移除了旧版 OpenSSL 1.1.x 中某些算法。 2. **项目依赖的库或工具链**(如 `webpack`、`create-react-app`、`vue-cli` 等)未适配 OpenSSL 3,导致加密算法调用失败。 --- ### **解决方案** #### **方法 1:临时设置环境变量(推荐)** 在运行命令前添加环境变量,强制使用旧版 OpenSSL 提供程序: ```bash # Linux/macOS export NODE_OPTIONS=--openssl-legacy-provider npm run dev # Windows(PowerShell) $env:NODE_OPTIONS = "--openssl-legacy-provider" npm run dev ``` #### **方法 2:修改启动脚本(持久化)** 在 `package.json` 的脚本命令中直接注入环境变量: ```json { "scripts": { "dev": "set NODE_OPTIONS=--openssl-legacy-provider && vite" // 或 "dev": "export NODE_OPTIONS=--openssl-legacy-provider; vite" } } ``` #### **方法 3:降级 Node.js 版本** 安装 Node.js v16.x(LTS 版本,默认使用 OpenSSL 1.1.x): ```bash # 使用 nvm 管理版本 nvm install 16 nvm use 16 ``` #### **方法 4:更新项目依赖** 检查并升级过时的依赖库(如 `webpack`、`react-scripts`): ```bash npm outdated # 查看过时的包 npm update # 更新到最新小版本 # 或手动更新 package.json 中的版本号后运行 npm install ``` --- ### **注意事项** - **安全性**:`--openssl-legacy-provider` 可能引入潜在风险,建议仅在开发环境使用。 - **长期方案**:推动项目依赖库升级到兼容 OpenSSL 3 的版本。 - **跨平台命令**:Windows 与 Unix 系统设置环境变量的语法不同,需注意区分。 --- ### **总结** 此错误本质是 Node.js 加密模块的版本兼容性问题。优先选择 **方法 1 或 2** 快速修复,长期需通过 **方法 4** 彻底解决兼容性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值