自動更新


NW.js 傾向於支援社群建立的更新解決方案,而非內建的解決方案。以下是現有解決方案的清單,值得查看。
- node-webkit-updater(由 @edjafarov 建立)
- nwjs-autoupdater(由 @oaleynik 建立)
- nw-autoupdater(由 @dsheiko 建立)

node-webkit-updater

NPM 模組,提供低階 API 給您,讓您能

  • 從正在執行的「舊」應用程式檢查明細的版本。
  • 如果版本與正在執行的版本不同,請下載新套件至暫存目錄。
  • 在暫存中解壓縮套件。
  • 從暫存中執行新應用程式,並關閉舊應用程式(即仍來自正在執行的應用程式)。
  • 新應用程式(在暫存中)會將自己複製到原始資料夾,覆寫舊應用程式。
  • 新應用程式會從原始資料夾執行自己,並結束程序。

不過,您應該自行建構此邏輯(基本範例)。

nwjs-autoupdater

微小的 Golang 應用程式(建置後僅約 2MB),可與 NW.js 應用程式捆綁,然後用於解壓縮更新。
若要更新目標應用程式,更新程式需要知道兩件事 - 新版本的 zip 檔案位於何處,以及應用程式的可執行檔位於何處,以便在更新後重新啟動應用程式。這些資訊可透過命令列引數 --bundle--inst-dir 傳遞給更新程式,其中 --bundle 是指向包含新應用程式版本的 zip 檔案的路徑,而 --inst-dir 是指向應用程式可執行檔的路徑。

相較於 node-webkit-updater,有多項優點

  • 它可以更新更新程式本身。
  • 不需要提升的權限(除非應用程式本身已安裝在需要提升權限的資料夾中)。
  • 更新程式的可執行檔大小較小,因為它不需要將整個新的 NW.js 應用程式與主應用程式捆綁在一起。

您也需要自行建構檢查更新的邏輯。範例說明如何使用 JavaScript 模組作為 NW.js 應用程式的進入點,並在背景中檢查更新。

nw-autoupdater

NPM 模組提供的 API 類似於 node-webkit-updater,但已擴充,適用於使用 Node 7.x 的 NW.js,並基於簡潔的非同步/等待語法。具體來說,它允許
- 從遠端發布伺服器讀取清單
- 檢查遠端清單中的版本是否大於其中一個本機清單
- 下載與主機平台相符的最新可用版本(根據遠端清單的 packages 地圖)
- 訂閱下載進度事件
- 在暫時目錄中解壓縮(zip 或 tar.gz)
- 訂閱安裝進度事件
- 關閉應用程式,並從下載的發布版本(從暫時目錄)啟動它(作為分離的程序)
- 備份實際版本,並以新版本取代它
- 從其原始位置重新啟動已更新的應用程式

此套件包含發布伺服器和用戶端範例。