如何解决 error:0308010C:digital envelope routines::unsupported 问题

参考文章:

由 nodejs 升级引起的构建错误:0308010C:digital envelope routines::unsupported – 掘金 (juejin.cn)

https://www.freecodecamp.org/chinese/news/error-error-0308010c-digital-envelope-routines-unsupported-node-error-solved/

最近把 Node.js 的版本升级到了 v18,结果在运行项目的时候遇到了问题,现记录一下这个问题的解决办法。

Error: error:0308010C:digital envelope routines::unsupported

image-20230405132651927

查找问题

遇事不决,先问下 New Bing:

这个错误通常是由于使用了不支持的加密算法或者使用了不支持的 OpenSSL 版本导致的。你可以尝试以下几种方法解决这个问题:

  1. 升级 Node.js 到最新版本。
  2. 升级 OpenSSL 到最新版本。
  3. 使用支持的加密算法。

如果你使用的是 Node.js 和命令行界面解决方案,如 Webpack、create-react-app 或 vue-cli-service,你可能已经遇到了这个错误。你可以参考这篇文章中的三种方式来解决这个错误。

解决问题

根据文章,有以下几种的解决办法:

1.将 –openssl-legacy-provider 传递给 Webpack 或 CLI 工具

​ 例如,在 React 应用程序中,你可以将 --openssl-legacy-provider 传递给启动脚本,如 "react-scripts --openssl-legacy-provider start"

​ 这应该就可以了。但是,如果这不能修复错误,那么就进行下一个修复。在许多情况下,它是有效的。

​ 也可以直接设置环境变量。

# Windows 下设置
set NODE_OPTIONS=--openssl-legacy-provider
# Linux 或 macOS 下设置
export NODE_OPTIONS=--openssl-legacy-provider
# 借助第三方包 cross-env
cross-env NODE_OPTIONS=--openssl-legacy-provider

2.使用 Node JS 的 LTS 版本

​ 考虑将你的 Node 版本降级到 16.16.0 或其他 LTS 版本。

​ 目前,Node 的最新 LTS 版本是 18.12.1。你可以从 Node JS 官方网站下载它,或者使用 NVM 来安装它。

3.将 React 脚本升级到 5 以上版本

​ 如果你正在使用 React,而这仍然无法为你解决错误,那么这很可能是你的 React 脚本的问题。

​ 如果你使用的 React 脚本版本低于 5,那么你应该把它升级到 5+ 版本。

总结

这次的教训告诉我们,在升级 Node.js 版本的时候一定要小心谨慎,多加排查兼容性问题,以免在升级之后无法正常运行。