摘要:筆者系貢獻者之一是什么官方解釋如下簡單來說,就是一個可以將打包成安裝器,以及可以為提供自動更新功能的全家桶。也是一個開源的也是利用了的來進行新版本的發布通知。而且因為是通過靜態文件服務器實現的,所以大大減少了計算消耗。
筆者系 electron-builder 貢獻者之一(#12)electron-builder 是什么
官方解釋如下:
A complete solution to package and build a ready for distribution Electron app with “auto update” support out of the box
簡單來說,electron-builder 就是一個可以將 electron app 打包成安裝器 (installer),以及可以為 electron app 提供自動更新功能的全家桶。
接下來分別介紹 electron-builder 的兩大功能:署名/打包/發布 和 自動更新
署名/打包/發布流程想要將開發完成的 app 署名打包成安裝器 (installer) 發布出去,需要進行以下幾個步驟
署名
打包
發布
electron-builder 的強大之處在于,以上幾個步驟可以一鍵完成,甚至包括打包成不同平臺版本 (etc. macOS, windows...)
但是,在讓 electron-builder 為我們完成以上步驟之前,它必須知道一系列信息才能進行署名/打包/發布一系列流程。它需要知道的信息有:
署名:署名證書在哪里,以及使用署名證書的密碼等信息
打包:打包的安裝器面向的平臺,是 macOS, windows 還是 linux ,以及安裝器的格式等等
發布:要將打包好的安裝器發布到的服務器,那么就需要和服務器進行鏈接的驗證信息
配置署名環節所需信息如果你進行署名打包的機器是 macOS 而且打包的安裝器對應的平臺也是 macOS 的話,electron-builder 會自動檢測你 keychain 里面可用的署名證書然后自動使用,那么就不需要手動配置署名信息了。
要配置署名環節的各種信息,有兩種方式(選其一即可,推薦在環境變量方式)
在 package.json 里設置
在環境變量中設置
在 package.json 里的設置方式
// 對于 windows 平臺的安裝器 "win": { "target": [ { "signingHashAlgorithms": "sha1", "sign": "********", "certificationFile": "../../*****", "certificatePassword": "******" } ] }, // 對于 macOS 平臺的安裝器 "mac": { "identity": "****" // The name of certificate to use when signing. },
在環境變量中配置
Env Name | Description |
---|---|
CSC_LINK | The HTTPS link (or base64-encoded data, or file:// link, or local path) to certificate (.p12 or .pfx file). Shorthand ~/ is supported (home directory). |
CSC_KEY_PASSWORD | The password to decrypt the certificate given in CSC_LINK. |
CSC_NAME | macOS-only Name of a certificate (to retrieve from login.keychain). Useful on a development machine (not on CI) if you have several identities (otherwise don"t specify it). |
CSC_IDENTITY_AUTO_DISCOVERY | true or false. Defaults to true — on a macOS development machine valid and appropriate identity from your keychain will be automatically used. |
CSC_KEYCHAIN | The keychain name. Used if CSC_LINK is not specified. Defaults to system default keychain. |
注意:如果你是在 macOS 上打包面向 windows 平臺的安裝器,必須增加兩個不同的環境變量 WIN_CSC_LINK 和 WIN_CSC_KEY_PASSWORD
配置打包環節所需信息所謂打包環節所需信息,就是指定安裝器(installer)的一系列配置信息。比如說運行環境,安裝器格式,版權信息,安裝器命名等等。這些信息都是在 package.json 中配置。比如:
"win": { "target": [ { "target": "nsis", "arch": [ "x64", "ia32" ], ...... } ] }, "mac": { "category": "your.app.category.type", "target": [ "zip", "dmg" ], },
更多詳細配置,請參考
macOS詳細配置
Windows詳細配置
Linux詳細配置
配置發布環節所需信息署名,打包完成后的安裝器需要上傳發布到服務器(比如說S3),那么electron-builder就需要將鏈接服務器的驗證信息(比如賬號/密碼,或者各種 Token 等等)。
由于發布的服務器種類各異,所以針對不停的服務器,配置的方式不盡相同
Bintray通過Bintray發布的話,需要一個 API key,這個API key 可以從用戶主頁獲取到("Edit Your Profile" -> API Key),將這個 API key 配置到環境變量 BT_TOKEN 即可
GenericServerGeneric 方式是針對可以直接上傳不需要驗證的服務器,無需格外配置信息。
GithubOptions使用GitHub發布服務器的話,也需要一個TOKEN,這個TOKEN可以在GitHub上創建,可以參考GitHub Token 創建方法。獲取到這個Token之后,將它放到環境變量 GH_TOKEN 中既可。
S3Options如果使用 Amazon S3 作為發布服務器的話,還需要額外安裝一個 electron-publisher-s3 模塊(可以通過npm 或者 yarn 來安裝)
同樣的使用 Amazon S3 也需要驗證,在 AWS 上獲取你的驗證信息,獲取到你在AWS上的 KEY ID 和 ACCESS_KEY 之后,然后分別放到環境變量 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 里面。或者你也可以放到 ~/.aws/credentials 里面。
SpacesOptions如果你使用 DigitalOcean Spaces 作為發布服務器的話,獲取到 access key 之后,然后在放到環境變量 DO_KEY_ID 和 DO_SECRET_KEY 里面即可
署名/打包/發布 一鍵完成上面的信息都配置好了的話,運行以下命令
$ build --publish
即可一鍵完成 署名/打包/發布 流程
更多詳細信息可以參考官網 CLI詳細說明
自動更新功能electron app 的自動更新方案,可以大概分為以下兩種:
有更新服務器 (with update server) 的方案
無更新服務器(without update server)的方案
electron-updater 就是針對沒有更新服務器的情況而生的解決方案。(PS:有更新服務器的解決方案,可以通過electron自帶的autoUpdater來實現,具體的解決方案會在文章最后說明,在這里主要講解electron-builder全家桶的使用方法)
在 electron-builder 中,這個叫做 electron-updater 的模塊與 electron-builder 本體不同,它是一個 runtime-dependency ,也就是放在package.json的dependencies里面的一個模塊(PS: 而 electron-builder 是放在devDependencies里面的)
electron-updater 功能強大之處在于,它支持多種無服務器自動更新方案。這里的無服務器并不是指的真的沒有服務器。具體來說就是在這種方案里沒有計算服務器 (eg. EC2),只有靜態文件服務器 (eg. S3)
electron-updater 模塊通過檢測靜態文件服務器上面的最新release版本號,將它與本地版本號進行對比,從而得知是否需要自動更新。
話不多說,我們直接來看代碼
const electron = require("electron"); const updater = require("electron-updater"); const autoUpdater = updater.autoUpdater; autoUpdater.setFeedURL({ provider: "generic", // 這里還可以是 github, s3, bintray url: "https://gitlab.com/_example_repo_/-/jobs/artifacts/master/raw/dist?job=build" }); autoUpdater.on("update-available", function (info) { console.log("Update available."); });
僅用兩行就完成了最基本的新版本的檢測機制,更多詳細的API可以參考官方文檔
附錄:有更新服務器的自動更新方案帶有更新服務器的自動更新方案主要由 electron 自帶的 autoUpdater 和 外部更新服務器組成
常用的第三方服務有
Hazel - 是一個開源的 update server. 主要利用了 Github 的 release tag 來進行新版本的發布通知。
Nuts – 也是一個開源的 update server, 也是利用了 Github 的 release tag 來進行新版本的發布通知。不同的是,它可以將 新版本緩存到本地硬盤,同時還支持 private repo。同時 Heroku 里面提供的 update server 就是 Nuts,在 Heroku 里面可以輕松啟動一個 Nuts 服務。
electron-release-server – 提供了一個 dashboard 來監控 release
Nucleus - 這是一個由 Atlassian 公司維護的 update server, 它可以同時支持多個 app 和 channel。而且因為是通過靜態文件服務器實現的,所以大大減少了計算消耗。
大家可以根據自己的需求來選擇搭建自己的更新服務器,具體做法可以參考各自的 GitHub 。
而在 app 方面,只需要增加以下代碼,就可以實現最基本的更新檢測
var app = require("app"); var os = require("os"); var autoUpdater = require("auto-updater"); var platform = os.platform() + "_" + os.arch(); var version = app.getVersion(); autoUpdater.setFeedURL("http://download.myapp.com/update/"+platform+"/"+version);
筆者博客
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/92482.html
摘要:前言本文主要介紹如何通過及兩種方式,將已有的應用打包成格式和可執行文件。導致了在打包的過程中非常慢。由于是初次接觸,如讀者在文中發現錯誤,請及時指正。 前言 showImg(https://segmentfault.com/img/bV6zNn?w=1319&h=594); 本文主要介紹如何通過electron-packager及electron-builder兩種方式,將已有的ele...
摘要:遠程讀取會有許多限制,防止引起不必要的安全隱患。比較時可以把點去掉轉為數字類型比較腳本執行完畢下載前可以拿到更新日志時間版本號和包大小,下載時可以拿到速度。然后開啟該項目的構建。將第一步生成的填至項目環境變量,參數名為。 父母都是做出納相關的工作,希望我能給他們做個簡單的進銷存,在上班的時候使用。開發一個不需要花錢買服務器,不需要依賴網絡(更新除外),單機版的程序,對于前端出身的我來說...
摘要:事件當發現一個可用更新的時候觸發,更新包下載會自動開始。在上只有是有效的。方法列表對象有以下的方法設置檢查更新的,并且初始化自動更新。這個一旦設置就無法更改。向服務端查詢現在是否有可用的更新。在下載完成后,重啟當前的應用并且安裝更新。 Electron打包調參軟件(windows版) ----------------------------------可選安裝位置,可自動更新,手動更新...
摘要:原文發表于如何搭建開發環境這個項目結構是我在編寫基于和的七牛文件上傳總結出來的本文主要介紹如何從零開始搭建高效的開發環境主要內容如下通過合理的目錄劃分來組織代碼使用簡化開發如何在渲染進程開發時使用熱更新如何在主進程開發時使用自動重啟如何在主 原文發表于 https://lleohao.github.io/2017/09/02/如何搭建Electron開發環境/ 這個項目結構是我在編寫...
閱讀 3592·2021-11-24 10:19
閱讀 3730·2021-09-30 09:47
閱讀 1295·2019-08-30 15:56
閱讀 792·2019-08-29 15:11
閱讀 905·2019-08-29 13:43
閱讀 3571·2019-08-28 18:25
閱讀 2162·2019-08-26 13:27
閱讀 1440·2019-08-26 11:44