Webpack构建报ERR_OSSL_EVP_UNSUPPORTED如何修改哈希算法?
问题根因
这个报错产生的原因是Node.js 17及以上版本内置的OpenSSL 3.0版本正式弃用了MD4哈希算法,而低于5.61.0版本的Webpack默认使用MD4作为生成构建哈希的算法,因此触发兼容性错误。
解决方案
方案1:修改Webpack配置指定哈希算法(最推荐,无兼容副作用)
直接在你的webpack.config.js的output配置项中新增hashAlgorithm字段,指定使用兼容OpenSSL 3.0的哈希算法即可,可选值为sha256或者性能更高的xxhash64。
修改前的output配置:
output: { path: path.resolve(__dirname, 'js'), filename: 'scripts.js' },
修改后的output配置:
output: { path: path.resolve(__dirname, 'js'), filename: 'scripts.js', hashAlgorithm: 'sha256' // 新增该行,也可替换为'xxhash64'获得更快的构建速度 },
修改后的完整配置如下:
const path = require('path'); const webpack = require('webpack'); const TerserPlugin = require('terser-webpack-plugin'); module.exports = { mode: 'development', entry: './src/js/scripts.js', output: { path: path.resolve(__dirname, 'js'), filename: 'scripts.js', hashAlgorithm: 'sha256' }, devtool: 'source-map', plugins: [new webpack.ProgressPlugin()], module: { rules: [] }, optimization: { minimizer: [new TerserPlugin()], splitChunks: { cacheGroups: { vendors: { priority: -10, test: /[\\/]node_modules[\\/]/ } }, chunks: 'async', minChunks: 1, minSize: 30000, name: 'true' } } };
方案2:临时启用OpenSSL旧版算法支持
如果暂时不想修改配置,可以在执行构建命令前添加环境变量,临时开启OpenSSL旧算法兼容:
- Linux/Mac 环境执行命令:
NODE_OPTIONS=--openssl-legacy-provider npm run build
- Windows CMD 环境执行命令:
set NODE_OPTIONS=--openssl-legacy-provider && npm run build
- Windows PowerShell 环境执行命令:
$env:NODE_OPTIONS="--openssl-legacy-provider"; npm run build
方案3:升级Webpack版本
Webpack 5.61.0及以上版本已经将默认哈希算法更换为不依赖OpenSSL的xxhash64,升级Webpack到最新稳定版也可以直接解决问题:
npm install webpack@latest --save-dev
内容的提问来源于stack exchange,提问作者Ryan Brownell
相关产品推荐
相关产品推荐

