Electron: 使用Electron Builder分發你應用程序(OSX)

建立安裝程序

Electron Builder 主要用來作三件事:node

  • 建立應用程序可執行文件(.app)git

  • 建立Squirrel更新包(.zip)github

  • 建立磁盤鏡像(.dmg)npm

應用程序須要代碼簽名, 不然自動更新機制不能正常工做. 爲了演示這個過程, 咱們經過鑰匙串建立一個測試證書.json

  • 進入「鑰匙串訪問」程序, 以下圖:c#

clipboard.png

  • 輸入證書名稱「Electron Auto Update」, 而且證書類型選擇「代碼簽名」, 而後點擊「建立」按鈕完成建立.windows

clipboard.png

  • 打包須要用到證書的名稱, 設置環境變量, 以在終端中使用這個證書api

export CSC_NAME="Electron Auto Update"

最後使用 electron-builder 是, 它會使用這個證書名字, 並用該證書對代碼進行簽名.服務器

自動更新

Electron 使用 Squirrel.Mac 做爲底層的自動更新框架. 自動更新過程包含幾個步驟:session

  • 客戶端請求服務器詢問是否有新的版本

  • 服務器應答以個JSON文件返回更新信息

  • 客戶端對比本地版本和最新版本, 若是有更新執行更新過程.

應用程序

Electron 的主進程模塊須要包含 auto-updater 模塊.

const autoUpdater = require('auto-updater')

auto-updater 在開發模式下不可用

還能夠添加相關事件監聽器:

# 更新可用, 能夠經過通知系統告知用戶有更新可用
autoUpdater.addListener("update-available", function(event) {  
    ...
});
# 更新下載完成後, 可提示用戶重啓應用程序
autoUpdater.addListener("update-downloaded", function(event, releaseNotes, releaseName, releaseDate, updateURL) {  
    ...
});
# 更新錯誤
autoUpdater.addListener("error", function(error) {  
    ...
});
# 正在檢查更新
autoUpdater.addListener("checking-for-update", function(event) {  
    ...
});
# 沒有新版本
autoUpdater.addListener("update-not-available", function(event) {  
    ...
});

下一步, 給 Squirrel 配置更新服務器URL:

# 這裏設置更新服務器域名或IP地址
const = UPDATE_SERVER = '';
var updateFeed = `http://${UPDATE_SERVER}/updates/latest`;  
const appVersion = require('./package.json').version;  
const feedURL = updateFeed + '?v=' + appVersion;  
autoUpdater.setFeedURL(feedURL);

最後一切就緒, 執行檢查:

# 能夠在每次啓動應用程序時檢查一次, 而且固定間隔檢查一次(好比一週, 依據你的應用程序更新頻率)
autoUpdater.checkForUpdates();

更新服務器

服務器應答:

  • 200 有更新可用, 並返回JSON更新描述信息

  • 204 無更新

關於更服務器, 有幾個現成的服務器實現, 也能夠本身寫一個.

electron-release-server 是最簡單最好用的一個

~/servers/electron-release-server$ npm start --prod

> electron-release-server@1.4.3 start /home/www/servers/electron-release-server
> node app.js

Warning: connect.session() MemoryStore is not
designed for a production environment, as it will leak
memory, and will not scale past a single process.
Warning: connect.session() MemoryStore is not
designed for a production environment, as it will leak
memory, and will not scale past a single process.

               .-..-.

   Sails              <|    .-..-.
   v0.12.13            |\
                      /|.\
                     / || \
                   ,'  |'  \
                .-'.-==|/_--'
                `--'-------' 
   __---___--___---___--___---___--___
 ____---___--___---___--___---___--___-__

Server lifted in `/home/www/servers/electron-release-server`
To see your app, visit http://localhost:5014
To shut down Sails, press <CTRL> + C at any time.

-------------------------------------------------------
:: Mon May 01 2017 21:16:24 GMT+0800 (CST)

Environment : production
Port        : 5014
-------------------------------------------------------
Destroyed version:  { assets: [],
  channel: 'beta',
  name: '0.0.2',
  notes: '第一個升級包',
  createdAt: '2017-05-01T13:23:01.000Z',
  updatedAt: '2017-05-01T13:23:01.000Z' }

Window 和 Linux

機制是同樣的, 配置過程有差別, 詳情參考官方文檔, 或Google.

參考資料

相關文章
相關標籤/搜索