Electron中LoadRunner.js报错:callback已调用或ERR_OSSL_EVP_UNSUPPORTED
解决Linux Electron+Webpack环境下的两类Node.js 17相关错误
一、搞定LoaderRunner.js的callback(): The callback was already called错误
这个问题一般是webpack loader里重复调用了context.callback()导致的,大概率是依赖的loader版本兼容问题,或是自定义loader代码存在逻辑漏洞。试试这些解决步骤:
- 先把项目里的相关依赖更新到最新稳定版,尤其是
loader-runner、fable-loader和webpack:npm update loader-runner fable-loader webpack - 如果你写了自定义loader,检查代码里是否在分支逻辑中重复触发了
callback。比如避免这种错误写法:
改成确保只调用一次的逻辑:// 错误示范:两次调用callback module.exports = function(source) { if (someCondition) { this.callback(null, source); } this.callback(null, source); // 此处重复调用 }module.exports = function(source) { if (someCondition) { return this.callback(null, source); } this.callback(null, source); } - 最后清除缓存和依赖文件,重新安装:
rm -rf node_modules package-lock.json npm install
二、解决ERR_OSSL_EVP_UNSUPPORTED错误
这个错误是Node.js 17+默认启用了OpenSSL 3.0的严格算法配置,导致旧版本webpack(尤其是webpack 4及以下)使用的加密算法不被支持。有三种解决方式可选:
办法1:临时启用旧的OpenSSL提供程序
在启动命令前添加环境变量即可:
NODE_OPTIONS=--openssl-legacy-provider npm run build # 启动Electron应用时使用 NODE_OPTIONS=--openssl-legacy-provider electron .
嫌每次手动输入麻烦的话,直接修改package.json中的scripts配置:
"scripts": { "build": "NODE_OPTIONS=--openssl-legacy-provider webpack", "start": "NODE_OPTIONS=--openssl-legacy-provider electron ." }
办法2:升级webpack到兼容版本
webpack 5.54.0及以上已经修复了该兼容性问题,直接升级相关依赖:
npm update webpack webpack-cli
升级完成后重新构建项目,通常无需再添加环境变量。
办法3:降级Node.js到16.x LTS版本
如果上述方法都不适用,可以临时将Node.js降级到16.x长期支持版本,该版本使用OpenSSL 1.1.1,不会出现此错误。用nvm管理版本的话:
nvm install 16 nvm use 16
内容的提问来源于stack exchange,提问作者Milan Popovic
相关产品推荐
相关产品推荐

