記錄Electron APP實現全量更新和熱更新的開發過程


最近的一個預開發任務,需要實現Electron APP 的更新策略

這里有兩種更新,

 

首先說下全量更新,

檢測到新版本后從服務器拉取 electron-builder生成的APP.zip文件,解壓后,把*.app/*.exe 覆蓋現有文件后重啟(Mac端)/重新安裝(PC端)。

這種更新的文件比較大,相當於刪掉舊的,重新下載新APP后運行,對於小更新如文案,圖片修改,並不友好。

electron builder 提供了這種更新方式,叫electron-updater

官方文檔如下:https://www.electron.build/auto-update

該文檔介紹的不夠詳細,使用中有很多問題都是參考github上的issue解決的

這里記錄1個問題,花了我2天多時間才搞定。

就是在執行"appUpdater.downloadUpdate()"方法時, 並沒有觸發 "download-process" 事件,

這樣就沒法在頁面上顯示下載的進度條,網速等信息。最后通過網上下載某個更新示例才得到啟發,

原來需要在下載之前,使用fs-extra.emptyDir清空緩存中的上次下載的更新文件,這樣"download-process"事件就可以完美觸發了

我的操作是在每次開啟App的時候清空這個緩存路徑

Mac/PC一套代碼就可搞定,還是很方便的

官網文檔根本就沒有提到過這個刪除緩存的操作

 

其次一個問題,產品的需求,要求下載過程中有"取消下載"的操作,

文檔中也沒有詳細說明,只有一個cancellationToken.
這個很快就找到了答案:https://github.com/electron-userland/electron-builder/issues/1150

需要說明的是,取消下載后,再次點擊下載,需要重新實例化 cancellationToken這個變量

 

---------------------------------------------------------------------- 

  

另一個是增量更新,

也叫熱更新,檢測到新版本后,從服務器拉取新版本指定的更新文件(如圖片,模版頁面,靜態html等),

在自己的服務器添加一個json文件,指定熱更新版本,熱更新所需的文件列表以及更新描述,

下載文件后替換到APP對應的文件中,然后重新載入/刷新APP。

這種方式適合小更新,但不試用后台邏輯大調整等較多的邏輯修改。

 

在開發過程中遇到了一個問題

如果打包時設置asar: false,在運行主進程時是可以進行文件操作, 並替換成功的。之后relaunch app就可以。

但是當設置asar: true是,運行主進程里的文件操作命令,是無法寫入修改asar里的文件的,

這個問題卡了我一天多,

 

最后終於找到了解決方法:這種方式需要將打包的靜態文件剝離出來,

在asar: true的情況下,要使用asar.unpack 設置未來更新時可能需要的替換文件。

建議不要暴露主進程文件,只把圖片,前端頁面放入asar.unpack.

如圖:

這樣打包后的app里就會多一個app.asar.unpacked

主進程文件放在asar里,但是在運行下文件修改命令時,修改的是asar.unpacked里的文件,這樣就可以替換成功了。

問題得到了解決,

下一步就是設置文件循環替換的promise邏輯和更新進度條。

或者下載一個包。解壓后替換。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM