1. 程式人生 > 實用技巧 >Electron~增量更新

Electron~增量更新

增量更新說明文件

English Version

提前準備

  1. 準備本地或者遠端伺服器或者遠端靜態檔案url
npm i -g http-server
cd yourFileFolder // 進入任意資料夾
http-server -p 4000 // 快速開啟本地服務,用於儲存更新檔案
  1. 配置和打包,拿到更新檔案內容並壓縮
// package.json
// 關閉asar模式
  "asar": false,
// 打包
  npm run pack-windows
// 進入打好的windows包
  cd release\0.x.x_setup\win-unpacked\resources
// 壓縮app資料夾 => app.zip, 拷貝app-update.yml和app.zip

  1. app.zip app-update.yml 傳到伺服器

  2. 本地流程,啟動客戶端,點選增量更新

// 入口
// src\render\components\AutoUpdate\index.tsx
 <Button type='primary' onClick={() => checkForPartUpdates()} style={{ marginLeft: 10 }}>
            增量更新
        </Button>

// 本地檢查與伺服器的version版本比較
// 如果找到新版本,則向主程序通訊,通知checkForPartUpdates開始更新

// src\render\utils\autoUpdate\partUpdate.js
/** 檢查更新 */
export async function checkForPartUpdates() {
  try {
    // check version 檢查版本
    const res = await checkVersion()
    if (res && res === 'OPEN_PART_UPDATE') {
      // 增量更新
      console.log('OPEN_PART_UPDATE')
      confirm({
        title: '檢測到更新',
        icon: <ExclamationCircleOutlined />,
        content: (
          <div>
            <p>是否更新?</p>
          </div>
        ),
        okText: '確認',
        cancelText: '取消',
        onOk() {
          ipc && ipc.send('checkForPartUpdates')
          message.info('請耐心等待幾秒..')
        },
        onCancel() {
          console.log('Cancel');
        },
      });
      // partUpdates()
    }
    if (res && res === 'OPEN_ALL_UPDATE') {
      console.log('OPEN_ALL_UPDATE')
      // 全量更新
    }
  } catch (error) {
    console.error('checkVersionERROR', error)
  }
}

function checkVersion(params) {
  return new Promise((resolve, reject) => {
    const currentVersion = remote.app.getVersion()
    // 獲取最新版本號
    downloadFile(remoteYmlURL, localYmlUrl).then(res => {
      const remoteVersion = JSON.stringify(res.data).split('\\n')[0].split(' ')[1]
      const remoteVersionArr = remoteVersion.split('.')
      const currentVersionArr = currentVersion.split('.')
      // 0.1.1 Y和Z比較來開啟增量更新  1.1.1 X比較來開啟全量更新
      if (Number(remoteVersionArr[0])