electron 自动更新随记
接手同事的桌面开发应用项目一体机,原本没有深入了解electron-updater的过程,导致遇到自动更新问题不知从何下手,因为之前的自动更新是可以用的,不知道怎么就突然不起作用了,总感觉是不是自己的操作问题,不敢改动太大,但其实是版本升级一系列问题导致更新失败,以下将记录整个更新过程。
- 问题原因分析
首先代码更新之后需要提交到Git仓库,所以会有一个job,执行了Gitlab-ci.yml的脚本,打包应用到服务器端,由于之前我们是托管到gitlab上面的,所以每一个job执行完成后将会把更新的包以及latest.yml文件保存(latest.yml文件非常重要,后面会提到),然后在启动electron应用的时候会去拿到服务器的latest.yml比较是否有更新,做一系列操作。但是由于Gitlab版本升级的原因,废弃了api的用法,导致我们去检查更新的时候拿不到文件,更新失败。所以我们可以使用自己的服务器来存放,不一定非要托管到gitlab上
- 代码分析
-
gitlab-ci.yml
如图,将打包好的文件存放在某服务器上(本地打包执行选中的那一句) -
自动更新的过程
引入了electron的app、BrowserWindow、globalShortcut(具体可以参考文档 www.w3cschool.cn/electronman…)
-
首先app的ready,表示应用开始启动时,如果是生产环境检查更新,调用electron-updater的方法checkForUpdates(),询问是否有更新。
-
然后去执行cchecking-for-update检查,那怎样检查的呢,就是去找到文件比较版本,那怎么找到这个文件呢?必须要配置一下它的feedurl,这就是存放更新包的路径,provider:generic。
-
如果有更新会触发"update-available",然后触发"download-progress"下载更新包,下载完成之后触发"update-downloaded",执行quitAndInstall(),表示退出当前应用重新安装。OK,过程很完美,那万一文件上传成功了,但是还是没有更新包,那我怎么知道这个过程中那一部分出了问题呢?
-
那就要用到electron-log包,如果没有的话,首先需要安装依赖,然后在每一部分打印我想看的日志,OK,查找官网,看看文件存在哪里?
-
找到日志文件,就可以看到是否执行成功,刚开始我每次打开包都是之前的旧包,我就很纳闷,去看了日志,发现下载比较慢,要等个一两分钟才能退出重新安装,而我每次都很着急,打开一看没有更新就直接手动退出了。