Webpack 4+Laravel Mix在Node.js21下执行npm run watch报错求助
解决Node.js 21 + Webpack4/Laravel Mix的"digital envelope routines::unsupported"错误
方案1:临时启用OpenSSL旧提供者(最推荐,无需改代码)
直接在运行命令前追加环境变量,强制Node使用兼容旧算法的OpenSSL模式:
NODE_OPTIONS="--openssl-legacy-provider" npm run watch
如果想让所有命令自动生效,修改项目根目录的package.json脚本:
{ "scripts": { "watch": "NODE_OPTIONS=\"--openssl-legacy-provider\" mix watch", "dev": "NODE_OPTIONS=\"--openssl-legacy-provider\" mix", "production": "NODE_OPTIONS=\"--openssl-legacy-provider\" mix --production" } }
方案2:修改Webpack与Babel的哈希配置(针对你尝试的hashFunction修改需求)
你之前仅配置了Webpack输出文件的哈希算法,但报错来自babel-loader的缓存逻辑——Babel默认用Node21不支持的md4生成缓存键,所以单独改output.hashFunction无法解决问题。需要同时覆盖Webpack和Babel的哈希设置:
修改webpack.mix.js文件如下:
let mix = require('laravel-mix'); mix.js([ 'resources/assets/js/app.js', ], 'public/js') .react('resources/assets/js/app.jsx', 'public/js') .webpackConfig({ // 设置Webpack全局哈希算法 output: { hashFunction: 'sha512' }, module: { hashFunction: 'sha512' }, // 覆盖Babel-loader的缓存哈希配置 module: { rules: [ { test: /\.(js|jsx)$/, use: { loader: 'babel-loader', options: { cacheDirectory: true, // 指定缓存使用的哈希算法 generatorOpts: { hashFunction: 'sha512' } } }, exclude: /node_modules/ } ] } });
注意:Webpack4对module.hashFunction的支持有限,且Laravel Mix可能会部分覆盖Babel配置,这个方案的稳定性不如方案1。
问题根源说明
Node.js 17及以上版本默认启用OpenSSL 3.0,而Webpack4、旧版Babel-loader依赖的md4哈希算法在新OpenSSL中被标记为不安全并禁用,这就是报错的核心原因。
内容的提问来源于stack exchange,提问作者dns_nx
相关产品推荐
相关产品推荐

