常见问题
# 常见问题
这里总结了开发时遇到的常见问题,方便开发者快速找到解决方案。
如果没有找到,还可以查查issue
# 1:打包时,下载资源超时
# 使用国内源,参见 安装 或 生成软件 教程
# 2:打包失败(异常)
错误1:python 。。。。。
解决:升级构建包,npm install electron-builder@23.0.6
错误2:打包报错Fatal error: Unable to commit changes
原因:
1. 磁盘是不是满了 ,这个坑也困扰了我半个小时,虽然不长,但是是低级错误
2. 杀毒软件,我把电脑管家关了就好了,还有mcfee,麦克非那个杀毒等等。
3. 使用makensis包时,账户名为中文,构建异常。
解决:
1. 清理磁盘
2. 退出杀毒软件
3. https://www.azimiao.com/6250.html
错误3:...resource\app.asar does not exist ...
解决:electron-egg/目录中,如果有app目录,则该目录必须是个普通文件目录,不能为项目目录,
比如,app/目录内,不能有 .git、 package.json、node_modules等文件。
错误4:...Need executable 'ar' to convert dir to deb
原因:fpm 工具需要 ar 命令才能打包deb, 安装binutils
解决:sudo apt install binutils
错误5:...Cannot find module 'fs/promises'
原因:electron-builder包版本太高,一些语法不兼容
解决:降低electron-builder版本,重新安装包:electron-builder <= 22.10.5
错误6:...ERR! better-sqlite@7.6.2 install ...
原因:sqlite需要更高版本的node.js
解决:更新node.js >= 14.21.1
错误7:... errorOUt=/home/hzx/.cache/electron-builder/fpm/fpm-1.9.3-2.3.1-linux-x86/lib/ruby/bin/ruby ...
原因:fpm没有相匹配的arm包,所以会去下载仓库中有的包!
解决:本地安装ruby并配置中国数据源,重新下载fpm包,最后使用软连接的方式链接fpm,重新执行打包命令该问题可解决)
sudo apt-get install ruby-full
gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
gem sources -l
sudo gem install fpm
cd ~/.cache/electron-builder/fpm/fpm-1.9.3-2.3.1-linux-X86_64/ #版本有可能不同,根据实际情况更改
rm -rf fpm
ln -s /usr/local/bin/fpm fpm
# 3:打包后,运行闪退 或 报错
闪退
# 开发模式正常,打包后运行闪退
1. 查看日志中是否有报错
2. 在cmd中运行程序,可看到打包后的程序运行是否有异常错误(日志中没有的)
如:d:/soft/electron-egg.exe 按“回车”
报错1:bytecode加密时,代码不规范
A JavaScript error occurred in the main process
Uncaught Exception:
TypeError:Class constructor ExampleService cannot be invoked without new
at getExports(C:Program Files ee resources app.asarnode modules ee-core core liblloader\file.loader..:15)
at ContextLoader.parse(C:Program Files ee resources app asarnode modules ee-core core liblloader\file.loader..:23)
at ContextLoader.load C:\Program Filesleeresources app.asarnode modules ee-core coreiblloader\file loader....:24)
at AppLoader.loadToContext(C:Program Files eeresources app.asarnode modules ee-core coreliblloader'ee loader.j..:28)
at AppLoader.loadService(C:Prog am Files eeresources app.asarnode modules ee-core corelib\loader\mixin){servi..:10)
at AppLoader.load(C\Program Files ee resources\app.asar)node modules ee-core ib\appLoaderjs:26:10)
at new BaseApp(C:\Program Fileseeresources app.asar node modules ee-core ib baseApp.js:28:17)
at new EeApp(C\Program Files ee resources app.asarnode modules ee-core ib eeApp.js:12:5)
at new Appliaction(C:\Program Fileslee resources app.asar node modules ee-core lib\applicationjs:67:5)
at new Main(C:\Program Files eeresources app.asarmain.js:6:5)
显示 TypeError Class constructor ExampleService cannot be invoked withou 'new' at ......
原因:每个加密的class文件,需要添加 toString() 方法
处理:请查看 代码加密文档 中 代码要求
报错2:bytecode、strict 加密,要区分系统;比如window-64只能构建64软件,不能构建32位 如下图,用win64构建的32位软件,是无法运行的。
A JavaScript error occurred in the main process
Uncaught Exception:
Error:[egg-core] load file:C:\Program Fileslee\resources\app.asar\public\electron\config config.defaultjsc,
error:Invalid Or incompatible cached data(cachedDataRejected)
at Object.Module.extensions. <computed>[as .jsc](C\Program Filesleelresourceslapp.asar\node.modules\bytenode\lib\indexjs:272:11)
at Module.load(internal/modules/cjs/loaderjs:935:32)
at Module.load(internal/modules/cjs/loaderjs:776:14)
at Function.f.load(electron/js2c/asar bundlejs:5:12913)
at Module.require (internal/modules/cjs/loaderjs:959:19)
at require(internal/modules/cjs/Herpers.js:88:18)
at Object.loadFile(C:Program Fileslee\resources\app.asarlnode moduleslee-corelcore\lib\utils\indexjs:29:19)
at AppLoader.requireFile(C:Program Filesleelresourceslapp.asarlnode moduleslee-corelcoreliblloaderlee loaderj.:23)
at AppLoaderloadFile(C:\Program
报错3:windows防火墙,授权electron应用访问网络 可能需要重启电脑
A JavaScript error occurred in the main process
Uncaught Exception:
Error: net::ERR CONNECTION REFUSED at SimpleURLLoaderWrapper.<anonymous> (electron/js2c/browser init.js:105:7068)
报错4:加密模块报错
原因:bytenode对electron的版本支持差异化
处理:请调整electron版本,或 bytenode版本
A JavaScript error occurred in the main process
Uncaught Exception:
Error: Cannot find module xxx
Require stack:
- xxxx/node_module/bytenode/lib/index.js
报错5:模块未找到
Uncaught Exception:
Error Cannot find module 'semver'
- xxx ....../resources/app.asar/.../index.js
原因:使用了非官方的包管理,如:yarn cnpm等
解决方案: 请使用npm
# 4:cmd控制台乱码
原因:windows终端问题。
解决方案:
./package.json
指定编码
"scripts": {
"dev": "chcp 65001 && ee-bin dev",
"start": "chcp 65001 && ee-bin start",
}
# 5:npm包缺失或异常
安装异常时,删掉node_modules和package-lock文件
# 1、如:cannot find module 'debug'
解决:npm install debug --save
# 2、npm install安装异常时
删掉 package-lock.json
删掉 node_modules文件夹
重新执行 npm install 或 cnpm install
# 备注
包问题,都用npm安装,不要用cnpm、pnpm、yarn
# 6:白屏
# 打包后白屏
可能原因1:前端base路径
前端项目配置中,base路径改为相对路径 './'
可能原因2:前端路由
前端项目路由是history,改成 hash 。
知识点:为什么不能使用代理? (opens new window)
# 7:安装 better-sqlite3 失败
不同node.js版本,对应的better-sqlite3版本也不尽相同
# error 1
......
env: python: No such file or directory
make: *** [Release/sqlite3.a] Error 127
rm ba23eeee118cd63e16015df367567cb043fed872.intermediate
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/Users/apple/.nvm/versions/node/v14.16.0/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:194:23)
......
# 原因
需要python环境,(MacOS高版本,不再提供默认python)
# 解决方案
如Mac系统(其它系统请自己百度Python安装方法)
1. brew install python@3.9
2. vim ~/.zshrc 添加
# python
alias python='/usr/local/bin/python3'
export PATH="/usr/local/opt/python@3.9/libexec/bin:$PATH"
3. source ~/.zshrc
# error 2
......
gyp ERR! build error
gyp ERR! stack Error: `C:\Program Files (x86)\MSBuild\14.0\bin\MSBuild.exe` failed with exit code: 1
gyp ERR! stack at ChildProcess.onExit (C:\nvm\v14.16.0\node_modules\npm\node_modules\node-gyp\lib\build.js:194:23)
gyp ERR! stack at ChildProcess.emit (events.js:315:20)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:277:12)
gyp ERR! System Windows_NT 10.0.19041
gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\nvm\\v14.16.0\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild" "--release"
gyp ERR! cwd D:\www\xing\oschina-desktop\node_modules\better-sqlite3
......
# 原因
需要node-gyp工具
# 解决方案
执行命令:npm i node-gyp -g
# 错误3
......
was compiled against a different Node.js version using
NODE_MODULE_VERSION 83. This version of Node.js requires
NODE_MODULE_VERSION 89. Please try re-compiling or re-installing
......
# 原因
sqlite包是用c\c++写的,下载的可执行程序可能与你的操作系统不一致,因此需要根据源代码重新构建。
# 解决方案
执行命令:npm run re-sqlite
# 错误4
......
Error: node-gyp failed to reuild ......electron-edge-js
Error: ...BuildTools\MSBuild\15.0\Bin\...
......
# 原因
缺少微软构建工具
# 解决方案
执行命令:npm --vs2015 i -g --production windows-build-tools
# 其它错误
查看 better-sqlite3 文档(Troubleshooting installation)
https://github.com/WiseLibs/better-sqlite3/blob/2194095aa1183e9c21d28eafadeac0d4d4d42625/docs/troubleshooting.md
# 8:在浏览器中打开vue启动的服务地址(http://localhost:8080)报错
错误:Uncaught TypeError: window.require is not a function......
原因:vue项目中有个demo功能需要访问electron模块,在普通浏览器中是不能解析的。
处理:尽量在electron启动的窗口中调试前端页面吧。
# 9:node module版本不匹配
# 错误
......
was compiled against a different Node.js version using
NODE_MODULE_VERSION 83. This version of Node.js requires
NODE_MODULE_VERSION 89. Please try re-compiling or re-installing
......
# 原因
一些npm包是用c\c++等其它语言写的,下载的可执行程序可能与你的操作系统不一致,因此需要根据源代码重新构建。
# 解决方案
electron-rebuild -f -w 模块名
# 10:macOS系统下,自动更新失败
// 尝试关闭asar功能
1. 检查确认苹果签名账号
2. 修改package.json中,build对象asar属性值为false
3. 使用代码加密功能,以防源码暴露
# 11:软件黑屏或者卡死
错误: ... ERROR:gpu_memory_buffer_support_x11.cc......
原因:win7或者Linux系统,不支持gpu加速
处理:在main.js文件的ready()方法中关闭硬件加速
伪代码:
const isWin7 = os.release().startsWith('6.1');
const isLinux = true;
if (isWin7 || isLinux) {
app.disableHardwareAcceleration();
}
# 12:运行encrypt 时报错
问题1:
env: node\r: No such file or directory
error Command failed with exit code 127.
原因:windows系统的换行回车是CRLF,类unix系统下是LF
解决方案:
// 用vs code打开把行尾序列由CRLF改成LF就可以了
node_modules/ee-bin/index.js
node_modules/ee-core/bin/tools.js
问题2:
error Cannot find module 'node:assert/strict'
- xxx ....../electron-egg/node_modules/bytenode/lib/index.js
- xxx ....../electron-egg/node_modules/ee-bin/tools/encrytp.js
原因:bytenode 模块的bug
解决方案:
// 安装一个指定版本 v1.3.6
npm uninstall bytenode
npm install bytenode@1.3.6
# 14:忽略ssl证书错误
ERROR:ssl_client_impl.cc(983) handshake failed; returned -1, SSL error code 1, net_error
原因:开发者可能加载了不安全的地址
解决方案:
// 生命周期文件 electron/index.js
const {app: electronApp} = require("electron");
async ready () {
electronApp.commandLine.appendSwitch('ignore-certificate-errors');
}
# 15:自动升级时,没有生成 latest.yml
解决方案:
在 ./config/builder.js
中,添加如下
"nsis": {
"oneClick": false,
......
......
},
// 添加这部分代码
"publish": [
{
"provider": "generic",
"url": ""
}
],
# 16:api 404、跨域问题
原因:electron 为了安全,默认不允许跨域,即前端发送http请求访问其它服务的 api 时候,会报错。 或者,提示 api 404 错误。
解决方案:
// 使用了代理proxy,导致api找不到
解决方法:
1:把代理模式,换成 环境变量模式,如:在.env(开发环境、生产环境)文件里定义多个url变量并赋值,代码中的url地址
用环境变量代替。
2:设置config.default.json中的windowsOption.webPreferences.webSecurity=false
3:关闭同源策略
./electron/index.js
async ready () {
// const { app: electronApp } = require("electron");
electronApp.commandLine.appendSwitch("disable-web-security");
}
# 17:arm64打包报错
构建模块问题,请仔细阅读:issue#I8H21P (opens new window)
# 18:终端显示devtools报错
原因:electron 高版本的bug,不影响功能,官方一直没修复...
[44354:0114/155817.742023:ERROR:CONSOLE(1)] "Request Autofill.enable failed. {"code":-32601,"message":"'Autofill.enable' wasn't found"}", source: devtools://devtools/bundled/core/protocol_client/protocol_client.js (1)
[44354:0114/155817.742071:ERROR:CONSOLE(1)] "Request Autofill.setAddresses failed. {"code":-32601,"message":"'Autofill.setAddresses' wasn't found"}", source: devtools://devtools/bundled/core/protocol_client/protocol_client.js (1)
# 19:linux 系统下,启动报错
错误内容:
Fatal:electron_main_delegate.cc(253)] Running as root without --no-sandbox is not supported。
原因:操作系统保护机制,root没有sandbox。
解决方案:
- 切换到普通用户
- 找网上其它方案。
# 20:path模块参数错误
错误内容:
TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received type undefined
原因:node.js 的 require() 模块导入是同步的,不要在模块顶部,直接使用 ee-core 的 api ,因为这时候框架还没初始化完成。
解决方案:
- 顶部仅限导入 ee-core 的 api,不要直接使用/调用其方法。
# 21:前端错误
错误内容:
error when starting dev server:
TypeError: crypto$2.getRandomValues is not a function
at resolveConfig (.../electron-egg/node_modules/vite/dist/node/chunks/dep-c8b7c7d0.js:10807:17)
原因:node.js 与 vite 版本不匹配
解决方案:
升级 node.js 或 降低 vite 版本。