Electron-qa
记录在开发 electron 时遇到的问题
生产模式如何解决请求跨域问题?
通常情况,生产模式的渲染进程,访问的是本地文件,也就是页面 url 是 ‘file:///index.html’ 这样的路径,会出现跨域问题。
请求跨域
这里主要是生产模式的处理,开发模式,可以使用 webpack/vite 进行代理。
使用本地文件
详细看 Electron 跨域问题处理
Cookie 处理
同上。
请求一致处理
是否需要将主进程的请求和渲染进程的请求使用同一个模块?
在进行 Http 请求时,可以有两种方式,一种是用主进程的 net.request
模块进行请求,另一种是用渲染进程的 XMLHttpRequest
对象,也就是 Ajax
。
这里说下两种的方式的区别:
net.request
- 相当于后端发起一个 HTTP 请求,没有浏览器的限制,比如没有跨域限制,可以获取响应返回的
Set-Cookie
- 需要自己处理上传的数据封装,比如
Form-Data
要处理文件内容,设置multiple/orm-Data
的boundary
- 需要自己手动处理请求结果,比如
buffer
->string
或buffer
->json
等
- 相当于后端发起一个 HTTP 请求,没有浏览器的限制,比如没有跨域限制,可以获取响应返回的
XMLHttpRequest
- 不能操作
cookie
- 不能操作
应用体积
node_modules 处理
非主进程使用的依赖,放到 devDependencies
内
升级
升级方案
进程间的通信
通信方式
应用安全问题
是否要开启 csp 模式?
开启 csp 模式后,如何处理请求跨域问题?
快捷键处理
快捷键类型
全局
本地
渲染进程
应用缓存
electron-store
优化开发模式
使用 Vite
使用 Vite 的问题
引入 Jest 问题
打包
macOS 环境打包 Windows
macOS Catalina doesn't support 32-bit executables and as result Wine cannot run Windows 32-bit applications too
打包配置如下:
{
"mac": {
"target": ["dmg"]
},
"win": {
"target": [
{
"target": "msi"
}
]
}
}
但是会出现异常:
• building target=DMG arch=x64 file=dist/ok-1.1.0.dmg
• packaging platform=win32 arch=x64 electron=17.1.0 appOutDir=dist/win-unpacked
• building target=MSI arch=x64 file=dist/ok 1.1.0.msi
• Manufacturer is not set for MSI — please set "author" in the package.json
⨯ macOS Catalina doesn't support 32-bit executables and as result Wine cannot run Windows 32-bit applications too
• building block map blockMapFile=dist/ok-1.1.0.dmg.blockmap
⨯ /xxx/node_modules/app-builder-bin/mac/app-builder_amd64 exited with code ERR_ELECTRON_BUILDER_CANNOT_EXECUTE failedTask=build stackTrace=Error: /xxx/node_modules/app-builder-bin/mac/app-builder_amd64 exited with code ERR_ELECTRON_BUILDER_CANNOT_EXECUTE
简单来说,就是不支持 x32 位的 windows 打包,那我们改成 nsis
即可:
{
"mac": {
"target": ["dmg"]
},
"win": {
"target": [
{
"target": "nsis"
}
]
}
}
或者直接用 Windows 环境进行打包。
Windows 打包 msi 时 name 有特殊字符时异常 errors CNDL0014
electron-builder@23.0.0 版本解决了此问题,更新即可
参考资料: https://github.com/electron-userland/electron-builder/pull/6530
macOS electron-builder autoupdate Error: ZIP file not provided
打包配置如下:
{
"mac": {
"target": {
"target": "dmg"
}
}
}
打包发布到 github 的时候是没有 .zip 文件的,这时候应用触发更新时会报错:
Error: ZIP file not provided:
解决方法,参考 kap
的配置,改成这样:
{
"mac": {
"target": {
"target": "default",
"arch": ["x64"]
}
}
}
下载新版本时出现 Https 问题:ERR_HTTP2_PROTOCOL_ERROR
添加下面的配置:
app.commandLine.appendSwitch('disable-http2');
autoUpdater.requestHeaders = {'Cache-Control' : 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0'};
github - electron-builder - issue net::ERR_HTTP2_PROTOCOL_ERROR thrown when an update is available
打包没有生成 latest.yml 文件
添加 publish 配置:
{
"publish":[{"provider": "generic", "url": "your url (it could be localhost)"}]
}
github - elctron-builder - issue 解决没有 latest.yml 的问题
Windows 没有 app-update.yml 文件
苹果授权验证异常:# You do not have required contracts to perform an operation.
应该是苹果开发者协议需要重新确认,去 https://developer.apple.com/account 重新点击同意就行了 参考链接