解决 Yarn Build 报错:digital envelope routines::unsupported 完整指南

解决 Yarn Build 报错:digital envelope routines::unsupported 完整指南

💡 原文中文,约1800字,阅读约需5分钟。
📝

内容提要

在使用 yarn run build 时,Node.js 17 及以上版本可能因默认使用 OpenSSL 3.0 而出现错误。解决方案包括设置环境变量、修改 package.json 或调整 Node.js 版本。建议优先设置环境变量以确保兼容性,并逐步更新项目依赖。

🎯

关键要点

  • 在使用 yarn run build 时,Node.js 17 及以上版本可能出现错误,原因是默认使用 OpenSSL 3.0。
  • 错误信息为:Error: error:0308010C:digital envelope routines::unsupported。
  • 解决方案包括设置环境变量、修改 package.json 或调整 Node.js 版本。
  • 推荐的解决方案是设置环境变量,具体命令根据操作系统不同而异。
  • 修改 package.json 可以为团队中的所有开发者提供永久解决方案。
  • 如果以上方案不适合,可以考虑降级到 Node.js 16.x LTS 或升级到最新的 LTS 版本。
  • 错误的根本原因是 OpenSSL 3.0 默认禁用了一些旧算法,导致项目中使用这些算法时出错。
  • 最佳实践建议优先选择设置环境变量,并确保使用最新的 LTS 版本 Node.js。
  • 在团队开发中,建议记录所需的 Node.js 版本和环境配置,使用 .nvmrc 文件保持一致性。
  • 常见问题包括环境变量未生效和安全性影响,建议逐步更新项目依赖以支持新版 OpenSSL。
  • 解决方案相对简单,但需考虑项目具体情况和长期维护计划。

延伸问答

为什么在使用 yarn run build 时会出现 digital envelope routines::unsupported 错误?

这个错误通常出现在使用 Node.js 17 及以上版本时,因为这些版本默认使用 OpenSSL 3.0,而一些旧的加密算法被禁用。

如何解决 yarn build 报错的问题?

可以通过设置环境变量、修改 package.json 或调整 Node.js 版本来解决这个问题。

设置环境变量的具体命令是什么?

在 Windows CMD 中使用 'set NODE_OPTIONS=--openssl-legacy-provider',在 Linux/Mac 中使用 'export NODE_OPTIONS=--openssl-legacy-provider'。

修改 package.json 有什么好处?

修改 package.json 可以为团队中的所有开发者提供永久解决方案,避免每次构建都需要设置环境变量。

如果以上方案不适合,我该如何处理?

可以考虑降级到 Node.js 16.x LTS 版本或升级到最新的 LTS 版本,并更新项目依赖。

使用 legacy provider 会影响项目安全性吗?

启用 legacy provider 主要是为了兼容性,通常不会造成实质性的安全风险,但建议逐步更新项目依赖以支持新版 OpenSSL。

➡️

继续阅读