4.1 使用方法
如果开发者使用electron-builder打包应用,那么也应考虑使用electron-updater来完成应用自动升级的开发工作,electron-updater这个库本身就是开发electron-builder的团队开发的(以前是一个独立的github仓储,现如今已经合并到electron-builder仓储内了),结合非常紧密,使用起来也很方便。
首先需要在electron-builder的配置信息中增加如下配置节:
publish: [{ provider: "generic", url: "http:// download.yoursite.com" }]
然后在应用程序的业务代码中增加如下逻辑:
const { autoUpdater } = require('electron-updater'); autoUpdater.checkForUpdates(); autoUpdater.on('update-downloaded', () => { this.mainWin.webContents.send('updateDownLoaded'); }) ipcMain.handle('quitAndInstall', (event) => { autoUpdater.quitAndInstall(); });
上述代码中autoUpdater.checkForUpdates方法会自动检测http://download.yoursite.com服务下是否存在比当前版本更新的版本文件,如果存在则会下载新版本相关的文件,下载完成会触发update-downloaded事件。在此事件中,应用可以向用户发出“重启应用以完成更新”的通知。
开发者可以在主进程通过webContents.send()方法向渲染进程发送'updateDownLoaded'消息,渲染进程通过ipcRenderer.on方法监听到此消息后,再操作Dom显示自定义的确认应用升级的对话框。如果开发者不需要实现自定义的确认对话框,也可以使用由Electron提供的dialog.showMessageBox方法,调用系统对话框,请求用户确认(此方法则直接在主进程调用,不需再与渲染进程交互了)。
用户在渲染进程确认升级后,渲染进程通过ipcRenderer.invoke方法发送quitAndInstall消息到主进程,主进程通过ipcMain.handle方法监听此消息,当主进程接收到此消息后调用autoUpdater.quitAndInstall()方法退出当前应用,并启动刚刚下载的新版本安装程序,开始安装新版本的应用。
这样当开发者发布了新版本后,只要把新版本相应的文件放置到http://download.yoursite.com服务上,在客户的旧版本应用程序启动时,就可以提示用户升级新版本了(应用启动时应主动执行上述逻辑)。
需要上传到升级服务器的文件,在各平台下略有不同,如下所示:
- Windows平台需要把[your_project_name] Setup [your_project_version].exe和latest.yml两个文件上传到你的升级服务器。
- Mac平台需要把[your_project_name]-[your_project_version]-mac.zip、[your_project_name]-[your_project_version].dmg和latest-mac.yml三个文件上传到你的升级服务器。
- Linux平台需要把[your_project_name]-[your_project_version].AppImage和latest-linux.yml两个文件上传到你的升级服务器。
上述文件electron-builder生成安装包时都会为开发者生成好并存放到指定的目录下。