在使用 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 错误。