electron-vue跨平台桌面应用开发实战教程(十一)——electron-updater应用更新

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/David1025/article/details/104801534

本文主要讲解electron如何执行使用electron-updater更新应用

1.安装electron-updater

  1. npm install electron-updater --save-dev

2.编写更新代码

  1. const { autoUpdater } = require('electron-updater')
  2. ipcMain.on('checkForUpdate', e =>
  3. updateHandle()
  4. )
  5. // 检测更新,在你想要检查更新的时候执行,renderer事件触发后的操作自行编写
  6. function updateHandle () {
  7. autoUpdater.checkForUpdates()
  8. const message = {
  9. error: '检查更新出错',
  10. checking: '正在检查更新……',
  11. updateAva: '检测到新版本,正在下载……',
  12. updateNotAva: '现在使用的就是最新版本,不用更新'
  13. }
  14. autoUpdater.setFeedURL('http://127.0.0.1/exe')
  15. // eslint-disable-next-line handle-callback-err
  16. autoUpdater.on('error', function (error) {
  17. sendUpdateError(JSON.stringify(error))
  18. sendUpdateMessage(message.error)
  19. })
  20. autoUpdater.on('checking-for-update', function () {
  21. sendUpdateMessage(message.checking)
  22. })
  23. autoUpdater.on('update-available', function (info) {
  24. console.log(info)
  25. sendUpdateMessage(message.updateAva)
  26. })
  27. autoUpdater.on('update-not-available', function (info) {
  28. console.log(info)
  29. sendUpdateMessage(message.updateNotAva)
  30. })
  31. // 更新下载进度事件
  32. autoUpdater.on('download-progress', function (progressObj) {
  33. console.log(progressObj.percent)
  34. win.webContents.send('downloadProgress', progressObj)
  35. })
  36. autoUpdater.on('update-downloaded', function (event, releaseNotes, releaseName, releaseDate, updateUrl, quitAndUpdate) {
  37. ipcMain.on('isUpdateNow', (e, arg) => {
  38. console.log(arg)
  39. console.log('开始更新')
  40. // some code here to handle event
  41. autoUpdater.quitAndInstall()
  42. })
  43. win.webContents.send('isUpdateNow')
  44. })
  45. }
  46. // 通过main进程发送事件给renderer进程,提示更新信息
  47. function sendUpdateMessage (text) {
  48. win.webContents.send('message', text)
  49. }

autoUpdater.checkForUpdates() 是启动更新检查

autoUpdater.setFeedURL(‘http://127.0.0.1/exe’) 是用来配置当前的更新包再服务器的地址,这里我是用nginx搭了一个服务器。这里需要注意的是,打完包之后需要将打好包的exe和latest.yml一起放到服务器上。如果下载100之后提示更新失败,多半是exe和latest.yml的信息不匹配。

测试时直接修改package.json 中version字段即可

3.渲染进程中可以监听更新进度

手动检查更新

  1. ipcRenderer.send('checkForUpdate')

监听更新进度,再这里可以结合界面为用户提供下载进度的展示,progressObj.percent就是下载的百分比

  1. ipcRenderer.on('message', (event, text) => {
  2. console.log(text)
  3. })
  4. // 注意:“downloadProgress”事件可能存在无法触发的问题,只需要限制一下下载网速就好了
  5. ipcRenderer.on('downloadProgress', (event, progressObj) => {
  6. console.log(progressObj.percent || 0)
  7. })
  8. ipcRenderer.on('isUpdateNow', () => {
  9. ipcRenderer.send('isUpdateNow')
  10. })