開發electron客戶端程序,打包是繞不開的問題。下面就我在工做中的經驗以及目前對electron-builder
的瞭解來分享一些心得。html
官網的定義node
A complete solution to package and build a ready for distribution Electron app for macOS, Windows and Linux with 「auto update」 support out of the box.linux
關於electron
和electron-builder
的基礎部分這篇文章就跳過了,有興趣的話能夠看這篇文章webpack
builder的使用和配置都是很簡單的 builder配置有兩種方式git
package.json
中直接配置使用(比較經常使用,咱們下面着重來說這個)electron-builder.yml
文件demo地址會在文章末尾給出(demo項目中electron
使用得是V2.0.7
版本,目前更高得是2.0.8
版本)。github
下面是一個簡單的package.js
中帶註釋的配置web
"build": { // 這裏是electron-builder的配置
"productName":"xxxx",//項目名 這也是生成的exe文件的前綴名
"appId": "com.xxx.xxxxx",//包名
"copyright":"xxxx",//版權 信息
"directories": { // 輸出文件夾
"output": "build"
},
// windows相關的配置
"win": {
"icon": "xxx/icon.ico"//圖標路徑
}
}複製代碼
在配置文件中加入以上的文件以後就能夠打包出來簡單的文件夾,文件夾確定不是咱們想要的東西。下一步咱們來繼續講別的配置。 2. 打包目標配置 要打包成安裝程序的話咱們有兩種方式,macos
"win": { // 更改build下選項
"icon": "build/icons/aims.ico",
"target": [
{
"target": "nsis" // 咱們要的目標安裝包
}
]
},複製代碼
"dmg": { // macOSdmg
"contents": [
...
]
},
"mac": { // mac
"icon": "build/icons/icon.icns"
},
"linux": { // linux
"icon": "build/icons"
}複製代碼
這個要詳細的講一下,這個nsis的配置指的是安裝過程的配置,其實仍是很重要的,若是不配置nsis那麼應用程序就會自動的安裝在C盤。沒有用戶選擇的餘地,這樣確定是不行的npm
關於nsis的配置是在build中nsis這個選項中進行配置,下面是部分nsis配置json
"nsis": {
"oneClick": false, // 是否一鍵安裝
"allowElevation": true, // 容許請求提高。 若是爲false,則用戶必須使用提高的權限從新啓動安裝程序。
"allowToChangeInstallationDirectory": true, // 容許修改安裝目錄
"installerIcon": "./build/icons/aaa.ico",// 安裝圖標
"uninstallerIcon": "./build/icons/bbb.ico",//卸載圖標
"installerHeaderIcon": "./build/icons/aaa.ico", // 安裝時頭部圖標
"createDesktopShortcut": true, // 建立桌面圖標
"createStartMenuShortcut": true,// 建立開始菜單圖標
"shortcutName": "xxxx", // 圖標名稱
"include": "build/script/installer.nsh", // 包含的自定義nsis腳本 這個對於構建需求嚴格得安裝過程至關有用。
},複製代碼
關於include
和 script
到底選擇哪個 ?
在對個性化安裝過程需求並不複雜,只是須要修改一下安裝位置,卸載提示等等的簡單操做建議使用include
配置,若是你須要炫酷的安裝過程,建議使用script
進行徹底自定義。
NSIS
對於處理安裝包這種東西,功能很是的強大。可是學習起來並不比一門高級語言要容易。其中的奧祕還要各位大佬自行探索
這裏上一些學習資源
主要是windows中64和32位的配置
CLI參數
electron-builder --ia32 // 32位
electron-builder // 64位(默認)複製代碼
nsis中配置
"win": {
"icon": "build/icons/aims.ico",
"target": [
{
"target": "nsis",
"arch": [ // 這個意思是打出來32 bit + 64 bit的包,可是要注意:這樣打包出來的安裝包體積比較大,因此建議直接打32的安裝包。
"x64",
"ia32"
]
}
]
}複製代碼
下面這個是給更新用的配置,主要是爲了生成lastest.yaml
配置文件
"publish": [
{
"provider": "generic", // 服務器提供商 也能夠是GitHub等等
"url": "http://xxxxx/" // 服務器地址
}
],複製代碼
基本上可用的完整的配置
"build": {
"productName":"xxxx",//項目名 這也是生成的exe文件的前綴名
"appId": "com.leon.xxxxx",//包名
"copyright":"xxxx",//版權 信息
"directories": { // 輸出文件夾
"output": "build"
},
"nsis": {
"oneClick": false, // 是否一鍵安裝
"allowElevation": true, // 容許請求提高。 若是爲false,則用戶必須使用提高的權限從新啓動安裝程序。
"allowToChangeInstallationDirectory": true, // 容許修改安裝目錄
"installerIcon": "./build/icons/aaa.ico",// 安裝圖標
"uninstallerIcon": "./build/icons/bbb.ico",//卸載圖標
"installerHeaderIcon": "./build/icons/aaa.ico", // 安裝時頭部圖標
"createDesktopShortcut": true, // 建立桌面圖標
"createStartMenuShortcut": true,// 建立開始菜單圖標
"shortcutName": "xxxx", // 圖標名稱
"include": "build/script/installer.nsh", // 包含的自定義nsis腳本
},
"publish": [
{
"provider": "generic", // 服務器提供商 也能夠是GitHub等等
"url": "http://xxxxx/" // 服務器地址
}
],
"files": [
"dist/electron/**/*"
],
"dmg": {
"contents": [
{
"x": 410,
"y": 150,
"type": "link",
"path": "/Applications"
},
{
"x": 130,
"y": 150,
"type": "file"
}
]
},
"mac": {
"icon": "build/icons/icon.icns"
},
"win": {
"icon": "build/icons/aims.ico",
"target": [
{
"target": "nsis",
"arch": [
"ia32"
]
}
]
},
"linux": {
"icon": "build/icons"
}
}複製代碼
Commands(命令):
electron-builder build 構建命名 [default]
electron-builder install-app-deps 下載app依賴
electron-builder node-gyp-rebuild 重建本身的本機代碼
electron-builder create-self-signed-cert 爲Windows應用程序建立自簽名代碼簽名證書
electron-builder start 使用electronic-webpack在開發模式下運行應用程序(須臾要electron-webpack模塊支持)複製代碼
Building(構建參數):
--mac, -m, -o, --macos Build for macOS, [array]
--linux, -l Build for Linux [array]
--win, -w, --windows Build for Windows [array]
--x64 Build for x64 (64位安裝包) [boolean]
--ia32 Build for ia32(32位安裝包) [boolean]
--armv7l Build for armv7l [boolean]
--arm64 Build for arm64 [boolean]
--dir Build unpacked dir. Useful to test. [boolean]
--prepackaged, --pd 預打包應用程序的路徑(以可分發的格式打包)
--projectDir, --project 項目目錄的路徑。 默認爲當前工做目錄。
--config, -c 配置文件路徑。 默認爲`electron-builder.yml`(或`js`,或`js5`)
複製代碼
Publishing(發佈):
--publish, -p 發佈到GitHub Releases [choices: "onTag", "onTagOrDraft", "always", "never", undefined]複製代碼
Deprecated(廢棄):
--draft 請改成在GitHub發佈選項中設置releaseType [boolean]
--prerelease 請改成在GitHub發佈選項中設置releaseType [boolean]
--platform 目標平臺 (請更改成選項 --mac, --win or --linux)
[choices: "mac", "win", "linux", "darwin", "win32", "all", undefined]
--arch 目標arch (請更改成選項 --x64 or --ia32)
[choices: "ia32", "x64", "armv7l", "arm64", "all", undefined]複製代碼
Other(其餘):
--help Show help [boolean]
--version Show version number [boolean]複製代碼
Examples(例子):
electron-builder -mwl 爲macOS,Windows和Linux構建(同時構建)
electron-builder --linux deb tar.xz 爲Linux構建deb和tar.xz
electron-builder -c.extraMetadata.foo=bar 將package.js屬性`foo`設置爲`bar`
electron-builder --config.nsis.unicode=false 爲NSIS配置unicode選項
複製代碼
TargetConfiguration(構建目標配置):
target: String - 目標名稱,例如snap.
arch 「x64」 | 「ia32」 | 「armv7l」 | 「arm64」> | 「x64」 | 「ia32」 | 「armv7l」 | 「arm64」 -arch支持列表複製代碼
NPM
下載的問題
由於NPM
在國內比較慢。致使electron-V.xxxx.zip
下載失敗。這些東西若是是第一次打包的話是須要下載對應electron
版本的支持文件。解決辦法有兩個
.npmrc
文件。而後加入下面這句代碼,可是這個有時候也不是很好用ELECTRON_MIRROR=http://npm.taobao.org/mirrors/electron/
複製代碼
C:\Users\Administrator\AppData\Local\electron\Cache
。例如我要下載1.8.4版本的electron
,那麼找到鏡像下得文件而後放到指定文件夾中。 (若是是在執行npm install
時下載不下來)直接在淘寶鏡像下載對應版本的zip,而後扔到C:\Users\YourUserName.electron就行
這就解決了這個問題,簡單又暴力。
NSIS
下載問題
若是你要打NSIS
得包還須要西再下載nsis-resources-xxx
等等包。通過上面得經驗這下咱們知道缺什麼就填什麼唄,經過錯誤日誌咱們能夠獲得咱們要下載得版本,通常錯誤中一般會展現github
下載地址,直接點開鏈接去下載。可是位置此次不同了。由於這是electron-builder
的支持環境因此咱們要放在C:\Users\Administrator\AppData\Local\electron-builder\cache\nsis\
下了。
通常狀況下解決這些問題的思路就是,缺什麼拿什麼😄。
electron-builder
是一個簡單又強大的庫。解決了打包這個棘手的問題,並且能夠應對大部分的打包需求。