我不是使用 Laravel Mix 的 Webpack 专家。我正在使用 Webpack 4 和 Laravel Mix 开发一个非常古老的项目。我知道最好的解决方案是升级所有软件包,但实际上我想让当前的解决方案运行起来。
我的开发机器上现在安装了 Node.js 版本 21。当我运行命令
npm run watch
进行开发时,我收到错误
错误:错误:0308010C:数字信封例程::不支持
我已经用谷歌搜索并找到了链接,告诉我,我需要向 Webpack 配置添加特殊配置
output.hashFunction = 'sha256'
或 output.hashFunction = 'sha512'
。
但是如何添加这个呢? 我在项目文件夹的根目录中有一个 webpack.mix.js 文件。 实际上看起来像这样:
let mix = require('laravel-mix');
mix.js([
'resources/assets/js/app.js',
], 'public/js')
mix.react('resources/assets/js/app.jsx', 'public/js');
然后我尝试添加以下内容:
mix.webpackConfig({
output: {
hashFunction: 'sha512',
},
});
但是错误还是一样
模块构建失败(来自 ./node_modules/babel-loader/lib/index.js): 错误:错误:0308010C:数字信封例程::不支持 在新哈希处(节点:内部/加密/哈希:68:19) 在Object.createHash(节点:加密:138:10)
如何更改 hashFunction?我不知道这是否能解决我最初的问题,但我需要测试一下。
我正在使用 Laravel Mix 和 Node.js 21。
我找到了答案。我需要将以下代码放入我的
webpack.mix.js
文件中:
const crypto = require("crypto");
const crypto_orig_createHash = crypto.createHash;
crypto.createHash = algorithm => crypto_orig_createHash(algorithm == "md4" ? "sha256" : algorithm);
let mix = require('laravel-mix');
mix.js([
'resources/assets/js/app.js',
], 'public/js')
mix.react('resources/assets/js/app.jsx', 'public/js');