实战解析:如何解决 Node.js v20 与旧版 Webpack 的兼容性冲突

0 阅读1分钟

在使用 Node.js v20.19.0 启动旧版 Webpack 项目时,常会遇到 Error: error:0308010C:digital envelope routines::unsupported 错误。

编辑

该问题源于 Node.js 17+ 将 OpenSSL 升级至 3.0,废弃了旧版 Webpack 依赖的 MD4 等哈希算法,导致兼容性冲突。

方案 1:临时快速解决

给 Node.js 加上 --openssl-legacy-provider 标志,允许使用旧版算法。

方法 A:直接在命令行运行

cmd 终端 set NODE_OPTIONS=--openssl-legacy-provider && npm run serve

PowerShell 终端 $env:NODE_OPTIONS="--openssl-legacy-provider"; npm run serve

方法 B:修改 package.json 脚本

编辑

方案 2:升级 Webpack

如果你的项目依赖 Webpack 4 或更早版本,它的 createHash 默认使用的 md4 算法在 OpenSSL 3.0 中已被弃用。

升级 Webpack 到 5.56.0+

npm install webpack@latest webpack-cli@latest webpack-dev-server@latest --save-dev

若暂时无法升级 Webpack 版本,可以修改 webpack.config.js 强制指定哈希算法

编辑

方案 3:降级 Node.js

如果短期内无法修改项目配置,可以降级到 Node.js 16(LTS,使用 OpenSSL 1.1.1),避免 OpenSSL 3.0 的限制:

使用 nvm(Node Version Manager)管理版本:

nvm install 16 nvm use 16

原因说明: Node.js 17+ 内置 OpenSSL 3.0,默认禁用了 md4/md5 这类弱哈希算法,而旧版 Webpack(4.x 及更早)在构建时默认用 md4 生成文件哈希,因此触发了 ERR_OSSL_EVP_UNSUPPORTED 错误。