Loading... > 在构建Web 应用时,Webpack 通常会使用 Terser 插件来优化和压缩 JavaScript 文件,当使用 Node.js 17 或更新版本时,构建过程中可能会出现如下错误: ```javascript 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 的旧版加密方法 ```javascript 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 版本: ```javascript nvm install 16 nvm use 16 ``` 降级后,再次运行构建命令,错误应该会消失。 ### 第三种 升级相关依赖 如果你想继续使用最新版本的 Node.js,另一种解决方案是升级项目中的 Webpack 和 Terser 插件版本。 更新 `terser-webpack-plugin` 和 `webpack ` 到最新版本: `yarn add terser-webpack-plugin@latest webpack@latest` 再次运行构建命令,检查是否已解决问题。 ## 总结 error:0308010C 主要是由于 Node.js 和加密库的版本不兼容。通过使用 `--openssl-legacy-provider` 选项、降级 Node.js 版本或升级构建工具链即可解决 Last modification:April 25, 2025 © Allow specification reprint Support Appreciate the author Like 如果觉得我的文章对你有用,请随意赞赏