Electron-builder打包詳解

Electron-builder打包詳解

原文地址https://github.com/QDMarkMan/CodeBlog/edit/master/Electron/electron-builder%E6%89%93%E5%8C%85%E8%AF%A6%E8%A7%A3.md

開發(fā)electron客戶端程序,打包是繞不開的問題散址。下面就我在工作中的經(jīng)驗以及目前對electron-builder的了解來分享一些心得内贮。

基本概念

官網(wǎng)的定義

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.

關(guān)于electronelectron-builder的基礎(chǔ)部分這篇文章就跳過了,有興趣的話可以看這篇文章

如何使用

builder的使用和配置都是很簡單的
builder配置有兩種方式

  • package.json中直接配置使用(比較常用讨永,我們下面著重來講這個)
  • 指定electron-builder.yml文件

demo地址會在文章末尾給出(demo項目中electron使用得是V2.0.7版本,目前更高得是2.0.8版本)滔驶。

下面是一個簡單的package.js中帶注釋的配置

  1. 基礎(chǔ)配置
"build": {  // 這里是electron-builder的配置
    "productName":"xxxx",//項目名 這也是生成的exe文件的前綴名
    "appId": "com.xxx.xxxxx",//包名  
    "copyright":"xxxx",//版權(quán)  信息
    "directories": { // 輸出文件夾
      "output": "build"
    }, 
    // windows相關(guān)的配置
    "win": {  
      "icon": "xxx/icon.ico"http://圖標路徑 
    }  
  }

在配置文件中加入以上的文件之后就可以打包出來簡單的<font clolor="red">文件夾</font>,文件夾肯定不是我們想要的東西卿闹。下一步我們來繼續(xù)講別的配置揭糕。

  1. 打包目標配置
    要打包成安裝程序的話我們有兩種方式萝快,
  2. 使用NSIS工具對我們的文件夾再進行一次打包,打包成exe
  3. 通過electron-builder的nsis直接打包成exe著角,配置如下
"win": {  // 更改build下選項
    "icon": "build/icons/aims.ico",
    "target": [
      {
        "target": "nsis" // 我們要的目標安裝包
      }
    ]
  },
  1. 其他平臺配置
  "dmg": { // macOSdmg
    "contents": [
      ...
    ]
    },
    "mac": {  // mac
      "icon": "build/icons/icon.icns"
    },
    "linux": { // linux
      "icon": "build/icons"
    }
  1. nsis配置

這個要詳細的講一下揪漩,這個nsis的配置指的是安裝過程的配置,其實還是很重要的吏口,如果不配置nsis那么應(yīng)用程序就會自動的安裝在C盤奄容。沒有用戶選擇的余地,這樣肯定是不行的

關(guān)于nsis的配置是在build中nsis這個選項中進行配置产徊,下面是部分nsis配置

"nsis": {
  "oneClick": false, // 是否一鍵安裝
  "allowElevation": true, // 允許請求提升昂勒。 如果為false,則用戶必須使用提升的權(quán)限重新啟動安裝程序舟铜。
  "allowToChangeInstallationDirectory": true, // 允許修改安裝目錄
  "installerIcon": "./build/icons/aaa.ico",// 安裝圖標
  "uninstallerIcon": "./build/icons/bbb.ico",//卸載圖標
  "installerHeaderIcon": "./build/icons/aaa.ico", // 安裝時頭部圖標
  "createDesktopShortcut": true, // 創(chuàng)建桌面圖標
  "createStartMenuShortcut": true,// 創(chuàng)建開始菜單圖標
  "shortcutName": "xxxx", // 圖標名稱
  "include": "build/script/installer.nsh", // 包含的自定義nsis腳本 這個對于構(gòu)建需求嚴格得安裝過程相當有用戈盈。
},

關(guān)于includescript 到底選擇哪一個 ?

在對個性化安裝過程需求并不復(fù)雜深滚,只是需要修改一下安裝位置奕谭,卸載提示等等的簡單操作建議使用include配置,如果你需要炫酷的安裝過程,建議使用script進行完全自定義痴荐。

NSIS對于處理安裝包這種東西血柳,功能非常的強大。但是學習起來并不比一門高級語言要容易生兆。其中的奧秘還要各位大佬自行探索

這里上一些學習資源

  1. 關(guān)于操作系統(tǒng)的配置

主要是windows中64和32位的配置

CLI參數(shù)

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"
      ]
    }
  ]
}
  1. 更新配置

下面這個是給更新用的配置根吁,主要是為了生成lastest.yaml配置文件

"publish": [
  {
    "provider": "generic", // 服務(wù)器提供商 也可以是GitHub等等
    "url": "http://xxxxx/" // 服務(wù)器地址
  }
],

完整配置

基本上可用的完整的配置

"build": {
    "productName":"xxxx",//項目名 這也是生成的exe文件的前綴名
    "appId": "com.leon.xxxxx",//包名  
    "copyright":"xxxx",//版權(quán)  信息
    "directories": { // 輸出文件夾
      "output": "build"
    }, 
    "nsis": {
      "oneClick": false, // 是否一鍵安裝
      "allowElevation": true, // 允許請求提升。 如果為false合蔽,則用戶必須使用提升的權(quán)限重新啟動安裝程序击敌。
      "allowToChangeInstallationDirectory": true, // 允許修改安裝目錄
      "installerIcon": "./build/icons/aaa.ico",// 安裝圖標
      "uninstallerIcon": "./build/icons/bbb.ico",//卸載圖標
      "installerHeaderIcon": "./build/icons/aaa.ico", // 安裝時頭部圖標
      "createDesktopShortcut": true, // 創(chuàng)建桌面圖標
      "createStartMenuShortcut": true,// 創(chuàng)建開始菜單圖標
      "shortcutName": "xxxx", // 圖標名稱
      "include": "build/script/installer.nsh", // 包含的自定義nsis腳本
    },
    "publish": [
      {
        "provider": "generic", // 服務(wù)器提供商 也可以是GitHub等等
        "url": "http://xxxxx/" // 服務(wù)器地址
      }
    ],
    "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"
    }
  }

命令行參數(shù)(CLI)

Commands(命令):

  electron-builder build                    構(gòu)建命名                      [default]
  electron-builder install-app-deps         下載app依賴
  electron-builder node-gyp-rebuild         重建自己的本機代碼
  electron-builder create-self-signed-cert  為Windows應(yīng)用程序創(chuàng)建自簽名代碼簽名證書
  electron-builder start                    使用electronic-webpack在開發(fā)模式下運行應(yīng)用程序(須臾要electron-webpack模塊支持)

Building(構(gòu)建參數(shù)):

  --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      預(yù)打包應(yīng)用程序的路徑(以可分發(fā)的格式打包)
  --projectDir, --project  項目目錄的路徑。 默認為當前工作目錄拴事。
  --config, -c             配置文件路徑沃斤。 默認為`electron-builder.yml`(或`js`,或`js5`)

Publishing(發(fā)布):

  --publish, -p  發(fā)布到GitHub Releases [choices: "onTag", "onTagOrDraft", "always", "never", undefined]

<font color="red">Deprecated(廢棄):</font>

  --draft       請改為在GitHub發(fā)布選項中設(shè)置releaseType                 [boolean]
  --prerelease  請改為在GitHub發(fā)布選項中設(shè)置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構(gòu)建(同時構(gòu)建)
  electron-builder --linux deb tar.xz          為Linux構(gòu)建deb和tar.xz
  electron-builder -c.extraMetadata.foo=bar    將package.js屬性`foo`設(shè)置為`bar`
  electron-builder --config.nsis.unicode=false 為NSIS配置unicode選項
    

TargetConfiguration(構(gòu)建目標配置):

target:  String - 目標名稱衡瓶,例如snap.
arch “x64” | “ia32” | “armv7l” | “arm64”> | “x64” | “ia32” | “armv7l” | “arm64”  -arch支持列表

常見的錯誤

  • NPM下載的問題

    因為NPM在國內(nèi)比較慢。導致electron-V.xxxx.zip下載失敗牲证。這些東西如果是第一次打包的話是需要下載對應(yīng)electron版本的支持文件哮针。解決辦法有兩個

    1. 設(shè)置鏡像:在C盤User中找到.npmrc文件。然后加入下面這句代碼,但是這個有時候也不是很好用
    ELECTRON_MIRROR=http://npm.taobao.org/mirrors/electron/
    
    1. 直接去淘寶鏡像文件庫找到對應(yīng)的文件并下載,放到指定的目錄下十厢,electron的淘寶鏡像地址等太。下載完之后放到指定的文件。一般文件得地址在C:\Users\Administrator\AppData\Local\electron\Cache寿烟。例如我要下載1.8.4版本的electron澈驼,那么找到鏡像下得文件然后放到指定文件夾中。
      [圖片上傳失敗...(image-5ae7ec-1572664515639)]
      [圖片上傳失敗...(image-c6ddcd-1572664515639)]

    <small>(如果是在執(zhí)行npm install時下載不下來)直接在淘寶鏡像下載對應(yīng)版本的zip筛武,然后扔到C:\Users\YourUserName.electron就行</small>

    這就解決了這個問題,簡單又暴力挎塌。

  • NSIS下載問題

    如果你要打NSIS得包還需要西再下載nsis-resources-xxx等等包徘六。經(jīng)過上面得經(jīng)驗這下我們知道缺什么就填什么唄,通過錯誤日志我們可以得到我們要下載得版本榴都,一般錯誤中通常會展示github下載地址待锈,直接點開連接去下載。但是位置這次不一樣了嘴高。因為這是electron-builder的支持環(huán)境所以我們要放在C:\Users\Administrator\AppData\Local\electron-builder\cache\nsis\下了竿音。
    [圖片上傳失敗...(image-987da6-1572664515639)]

一般情況下解決這些問題的思路就是,缺什么拿什么??拴驮。

總結(jié)

electron-builder是一個簡單又強大的庫春瞬。解決了打包這個棘手的問題,而且可以應(yīng)對大部分的打包需求套啤。

Demo地址

原文地址 如果覺得有用得話給個?吧

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宽气,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子潜沦,更是在濱河造成了極大的恐慌萄涯,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唆鸡,死亡現(xiàn)場離奇詭異涝影,居然都是意外死亡,警方通過查閱死者的電腦和手機争占,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進店門燃逻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人燃乍,你說我怎么就攤上這事唆樊。” “怎么了刻蟹?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵逗旁,是天一觀的道長。 經(jīng)常有香客問我,道長片效,這世上最難降的妖魔是什么红伦? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮淀衣,結(jié)果婚禮上昙读,老公的妹妹穿的比我還像新娘。我一直安慰自己膨桥,他們只是感情好蛮浑,可當我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著只嚣,像睡著了一般沮稚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上册舞,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天蕴掏,我揣著相機與錄音,去河邊找鬼调鲸。 笑死盛杰,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的藐石。 我是一名探鬼主播即供,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼贯钩!你這毒婦竟也來了募狂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤角雷,失蹤者是張志新(化名)和其女友劉穎祸穷,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體勺三,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡雷滚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了吗坚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片祈远。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖商源,靈堂內(nèi)的尸體忽然破棺而出车份,到底是詐尸還是另有隱情,我是刑警寧澤牡彻,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布扫沼,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏缎除。R本人自食惡果不足惜严就,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望器罐。 院中可真熱鬧梢为,春花似錦、人聲如沸轰坊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽衰倦。三九已至袒炉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間樊零,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工孽文, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留驻襟,地道東北人。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓芋哭,卻偏偏與公主長得像沉衣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子减牺,可洞房花燭夜當晚...
    茶點故事閱讀 45,585評論 2 359

推薦閱讀更多精彩內(nèi)容