当前位置: 首页 > news >正文

node ---- 解决错误【Error: error:0308010C:digital envelope routines::unsupported】

1. 报错

在 Node.js 18.18.0 的版本中,遇到以下错误:

this[kHandle] = new _Hash(algorithm, xofLen);
                  ^
Error: error:0308010C:digital envelope routines::unsupported

这个错误通常发生在运行项目或构建时,尤其是在使用 Webpack、Vite 或其他构建工具时。

2. 报错截图

输入图片说明

3. 错误原因

该错误的根本原因是 Node.js 17+ 默认使用了 OpenSSL 3.0,而 OpenSSL 3.0 移除了对一些旧版加密算法(如 MD4 、 MD5 等)的支持。如果你的项目或依赖库中使用了这些旧版算法,就会触发此错误。

4. 解决方案一:临时解决方案:启用旧版 OpenSSL 提供程序

通过设置环境变量 NODE_OPTIONS ,可以启用旧版 OpenSSL 提供程序,从而解决兼容性问题。

4.1 Linux/MacOS
export NODE_OPTIONS=--openssl-legacy-provider
4.2 Windows
set NODE_OPTIONS=--openssl-legacy-provider
4.3 在 package.json 中设置

如果你希望在运行脚本时自动应用此设置,可以修改 package.json :

"scripts": {
  "dev:h5:set": "SET NODE_OPTIONS=--openssl-legacy-provider && npm run build:h5 -- --watch",
  "dev:h5:export": "export NODE_OPTIONS=--openssl-legacy-provider && npm run build:h5 -- --watch"
}

5. 解决方案二:降级 Node.js 版本

如果你的项目对 Node.js 版本要求不高,可以降级到 Node.js 16 或更低版本,因为这些版本默认使用 OpenSSL 1.1.1,不会触发此错误。

  • 使用 nvm 切换 Node.js 版本:
nvm install 16
nvm use 16

6. 解决方案三:更新项目依赖

检查项目中是否有依赖库使用了旧版加密算法,并尝试更新这些依赖库到最新版本。通常,新版本会修复与 OpenSSL 3.0 的兼容性问题。

7. 解决方案四:修改 Webpack 配置

如果你使用的是 Webpack,可以通过修改配置来避免使用旧版加密算法:

module.exports = {
  output: {
    hashFunction: 'sha256', // 使用 SHA-256 替代 MD5
  },
};

8. 注意事项

  1. 临时解决方案的风险 : --openssl-legacy-provider 是一个临时解决方案,旧版 OpenSSL 提供程序可能存在安全风险,建议仅在开发环境中使用。
  2. 生产环境 :在生产环境中,应尽量避免使用临时解决方案,而是通过更新依赖或降级 Node.js 版本来解决问题。
  3. 长期解决方案 :建议尽快更新项目或依赖库,避免使用旧版加密算法。

9. Node.js 版本

由于使用的是 taro 3.6.7 框架,所以在本地开发时,存在 node 的版本要求,因此不对版本降级处理。

输入图片说明

10. 本地使用临时方案成功解决

输入图片说明

11. 总结

错误是由于 Node.js 17+ 默认使用 OpenSSL 3.0 导致的。通过启用旧版 OpenSSL 提供程序、降级 Node.js 版本或更新项目依赖,可以解决此问题。在开发环境中,可以使用临时解决方案快速修复问题,但在生产环境中,建议采用更安全的长期解决方案。

http://www.dtcms.com/a/109116.html

相关文章:

  • 第一部分 领域驱动设计的原则与实践
  • 10.多线程
  • 【C++】第八节—string类(上)——详解+代码示例
  • P4305 [JLOI2011] 不重复数字
  • 系统与网络安全------Windows系统安全(8)
  • 纯c++实现transformer 训练+推理
  • AI+自动化测试:如何让测试编写效率提升10倍?
  • torch 拆分子张量 分割张量
  • idea运行tomcat项目,很慢的问题
  • 我想尝试做一个钢铁侠反应堆
  • 人工智能与大模型的关系
  • Java学习总结-io流-练习案例
  • 4.3学习总结
  • umi框架开发移动端h5
  • 【MySQL】理解MySQL的双重缓冲机制:Buffer Pool与Redo Log的协同之道
  • C++数据类型(整型、浮点型、字符型、布尔型)
  • 办公设备管理系统(springboot+ssm+jsp+maven)
  • 面向教育领域的实时更新RAG系统:核心模块设计与技术选型实践指南
  • C++:算术运算符
  • 统计子矩阵
  • Parasoft C++Test软件单元测试_操作指南
  • 从内核到应用层:Linux缓冲机制与语言缓冲区的协同解析
  • 【MyBatis】深入解析 MyBatis XML 开发:增删改查操作和方法命名规范、@Param 重命名参数、XML 返回自增主键方法
  • ES中经纬度查询geo_point
  • 图像处理之Homography matrix(单应性矩阵)
  • 2025年4月3日(模数转换器)
  • 【Centos】centos7内核升级-亲测有效
  • 【动态规划】P8638 [蓝桥杯 2016 省 A] 密码脱落
  • 树莓派 5 换清华源
  • 【C语言】C语言文件操作指南