解决 Terser 插件构建错误:Error: error:0308010C

在构建Web 应用时,Webpack 通常会使用 Terser 插件来优化和压缩 JavaScript 文件,当使用 Node.js 17 或更新版本时,构建过程中可能会出现如下错误:

js/chunk-vendors.57e08fad.js from Terser
Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:69:19)
    at Object.createHash (node:crypto:133:10)
    ...

此错误通常伴随着 Build failed with errors 消息,导致构建失败。

错误原因

这个问题主要源于 Node.js 17+ 加密模块crypto发生了变化。这些版本默认使用 OpenSSL 3.x,而某些加密算法或配置在 OpenSSL 3.x 中已经不再受支持。这会导致 Terser 这样的工具在进行哈希操作时遇到问题,

解决方案

解决这个问题有几种方式,具体取决于你的项目环境

1. 使用 --openssl-legacy-provider

在 Node.js 17 +的版本中 ,通过指定 --openssl-legacy-provider 可以让 Node.js 使用 OpenSSL 的旧版加密方法

操作步骤:

使用 Yarn 作为包管理工具

NODE_OPTIONS=--openssl-legacy-provider yarn build

使用 npm 进行构建

NODE_OPTIONS=--openssl-legacy-provider npm run build

2. 降级 Node.js 版本

如果你的项目不需要使用 Node.js 17+,降级到 Node.js 16.x 或 14.x 版本也是一种可行的解决方案。

操作步骤:

  1. 确认当前使用的 Node.js 版本:
   node -v
  1. 如果需要降级,可以使用 Node Version Manager (NVM) 来管理 Node.js 版本:
   nvm install 16
   nvm use 16

降级后,再次运行构建命令,错误应该会消失。

3. 升级相关依赖

如果你想继续使用最新版本的 Node.js,另一种解决方案是升级项目中的 Webpack 和 Terser 插件版本。

操作步骤:

  1. 更新 terser-webpack-pluginwebpack 到最新版本:
   yarn add terser-webpack-plugin@latest webpack@latest
  1. 再次运行构建命令,检查是否已解决问题。

总结

error:0308010C 主要是由于 Node.js 和加密库的版本不兼容。通过使用 --openssl-legacy-provider 选项、降级 Node.js 版本或升级构建工具链即可解决

原创文章,作者:geeklinux.cn,如若转载,请注明出处:https://www.geeklinux.cn/jsjc/1572.html

(0)
geeklinux.cn的头像geeklinux.cn
上一篇 2024 年 8 月 29 日 下午8:46
下一篇 2024 年 9 月 9 日 上午9:38

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注