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

文章目录

1, 问题背景

最近在升级我之前的一个网站的过程中,由于使用了高版本的nodejs v18.0.0报错如下

bash 复制代码
(undefined) assets/js/styles.1dbb3634.js from Terser
Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:67:19)
    at Object.createHash (node:crypto:133:10)
    at E:\icepip-starter-example\freezepin-blog\node_modules\terser-webpack-plugin\dist\index.js:217:37
    at Array.forEach (<anonymous>)

从报错的内容看提示不支持 ,查阅了nodejs 相关文档

assets/js/styles.1dbb3634.js from Terser
Error: error:0308010C:digital envelope routines::unsupported

从错误码来看在nodejs 的github Issue里找到了不少,应该有很多同学也是升级过程遇到了和我一样的问题

扫了一篇相关的iuss 全都是说问题的,好像都没有解决。最后找到了一个参考链接
https://stackoverflow.com/questions/69692842/error-message-error0308010cdigital-envelope-routinesunsupported
还遇到一个打包的时候的问题,修改内存大小限制即可解决
Reached heap limit Allocation failed - JavaScript heap out of memory 报错
node --max_old_space_size=4096

2.解决方法1

在启动命令里添加

bash 复制代码
Linux/Unix 下: export NODE_OPTIONS=--openssl-legacy-provider
Win CMD下: set NODE_OPTIONS=--openssl-legacy-provider
Win PWSH下: $env:NODE_OPTIONS = "--openssl-legacy-provider"

比如我的修改为如下正常

set NODE_OPTIONS=--openssl-legacy-provider 这行命令其实是设置了一个环境变量 NODE_OPTIONS,并给它赋予了一个值 --openssl-legacy-provider。

这个值 --openssl-legacy-provider 是 Node.js 的一个命令行选项,当使用 Node.js 17 或更高版本时,由于 OpenSSL 3.0 的引入,一些老的加密算法被弃用。当的程序需要使用这些被弃用的算法时,就会出现错误。

使用 --openssl-legacy-provider 这个选项,会让 Node.js 使用老版本的 OpenSSL,这样的程序就能继续使用这些被弃用的加密算法,不会出现错误。

  1. Reached heap limit Allocation failed - JavaScript heap out of memory 报错
    给命令添加参数 node --max_old_space_size=4096

3.解决方法2

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

看到网上的一个解决方法

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

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

就我而言,我目前使用的是 react-scripts 3.4.3:

要将 react-scripts 升级到 5+,你可以通过两种方式进行:

卸载并重新安装 react-scripts

  • 打开终端,运行 npm uninstall react-scripts
  • 运行 npm install react-scripts

手动改变 react 脚本的版本

  • 进入你的 package.json,将 react-script 版本改为 5.0.2
  • 通过运行 rm --rf node_modules 删除 node_modules 文件夹
  • 通过运行 rm --rf package.lock.json 来删除 package.lock.json 文件
  • 运行 npm install 或 yarn add,这取决于你所使用的软件包管理器

在将 react-scripts 的版本升级到 5+ 之后,我的 React 应用程序现在可以正常工作了:

3.参考资料

https://github.com/nodejs/node/issues/

https://stackoverflow.com/questions/69692842/error-message-error0308010cdigital-envelope-routinesunsupported

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

相关推荐
定栓14 小时前
Webpack迁到Vite第五节:第三方库兼容
前端·webpack·node.js
G018_star sky♬19 小时前
如何用nodejs写一个简单后端服务
node.js
kiracrimson19 小时前
npm 入门:包管理器、依赖与 npx
前端·npm·node.js
花花鱼21 小时前
使用 nvm 管理多 Node.js 版本 + pnpm 完整实操,解决 pnpm Node 版本报错
node.js
定栓1 天前
Webpack迁到Vite第四节:SVG 图标系统
前端·webpack·node.js
小天源1 天前
智叟云集系统架构解析:从品牌 AI 可见度监测到前后端协同
人工智能·react.js·系统架构·node.js·react·ai监测·ai品牌监测
迪幻2 天前
封装自己的 npm 依赖并存储到个人 GitHub
前端·npm·github
用户6122716650242 天前
电费 9 毛/天:我让一台 9 年前的旧 MacBook 替我上班,它比入门云服务器还能打
node.js
PegasusYu2 天前
Node.js使用nedb轻量级数据库测试脚本
数据库·electron·node.js·脚本·测试·轻量级·nedb