electron+vue框架搭建桌面应用(三)

我们再用户下载完我们的软件后不可能每次更新都要用户去指定网站进行下载

所以,我们需要用到electron+vue 的自动更新功能

配置文件 "package.json"

"build" : {
    "publish": [
      {
        "provider": "generic",
        "url": "http://127.0.0.1:3000/newfile/" // 被更新文件存放位置
      }
    ],
},
"devDependencies": {
    "electron": "^2.0.4",
    "electron-updater": "3.0.0",
    "electron-builder": "^20.19.2"
}

安装依赖

需要注意的是electron-vue中目前是使用electron 2.0.4的,所以最新版的electron-updater是不支持的,若手动升级electron版本的话,如果你使用了node-ffi等的话,是无法运行的,但是如果你只是使用node-ffi的话可以切换成node-ffi-napi然后对electron进行升级

yarn add electron-updater@3.0.0 --dev(推荐)

npm i electron-updater@3.0.0 -D

cnpm i electron-updater@3.0.0 -D

自动更新 "update.js"

import { autoUpdater } from 'electron-updater'
import { ipcMain } from 'electron'
/**
 * -1 检查更新失败 0 正在检查更新 1 检测到新版本,准备下载 2 未检测到新版本 3 下载中 4 下载暂停 5 下载暂停恢复 6 下载完成 7 下载失败 8 取消下载
 * */
class Update {
  mainWindow
  constructor (mainWindow) {
    this.mainWindow = mainWindow
    autoUpdater.setFeedURL('http://127.0.0.1:3000/newfile') // 更新地址与package.json中的build.publish.url相对应
    /**
    * 根据自身需求选择下方方法
    */
    this.error()
    this.start()
    this.allow()
    this.unallowed()
    this.listen()
    this.download()
  }
  Message (type, data) {
    this.mainWindow.webContents.send('message', type, data)
  }
  error () { // 当更新发生错误的时候触发。
    autoUpdater.on('error', (err) => {
      this.Message(-1, err)
      console.log(err)
    })
  }
  start () { // 当开始检查更新的时候触发
    autoUpdater.on('checking-for-update', (event, arg) => {
      this.Message(0)
    })
  }
  allow () { // 发现可更新数据时
    autoUpdater.on('update-available', (event, arg) => {
      this.Message(1)
    })
  }
  unallowed () { // 没有可更新数据时
    autoUpdater.on('update-not-available', (event, arg) => {
      this.Message(2)
    })
  }
  listen () { // 下载监听
    autoUpdater.on('download-progress', () => {
      this.Message('下载进行中')
    })
  }
  download () { // 下载完成
    autoUpdater.on('update-downloaded', () => {
      this.Message(6)
      setTimeout(m => {
        autoUpdater.quitAndInstall()
      }, 1000)
    })
  }
  load () { // 触发器
    autoUpdater.checkForUpdates()
  }
}
export default Update

主进程 "index.js"

import Update from './update'
  mainWindow = new BrowserWindow({
  height: 563,
  useContentSize: true,
  width: 1000
})
let update = new Update(mainWindow)

猜你喜欢

转载自www.cnblogs.com/zzkxjh/p/12825436.html
今日推荐