解决 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 这样的工具在进行哈希操作时遇到问题,

解决方案

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

第一种 使用 --openssl-legacy-provider

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

NODE_OPTIONS=--openssl-legacy-provider yarn build # 使用 Yarn 作为包管理工具
NODE_OPTIONS=--openssl-legacy-provider npm run build # 使用 npm 进行构建

第二种 降级Node.js 版本

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

使用 Node Version Manager (NVM) 来管理 Node.js 版本:

 nvm install 16
 nvm use 16

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

第三种 升级相关依赖

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

更新 terser-webpack-pluginwebpack 到最新版本:

`yarn add terser-webpack-plugin@latest webpack@latest` 

再次运行构建命令,检查是否已解决问题。

总结

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

评论区
头像
文章目录