💡
原文中文,约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。
➡️