electron打包:electron-packager及electron-builder兩種方式實現(for Windows)


前言

electron

本文主要介紹如何通過electron-packager及electron-builder兩種方式,將已有的electron應用打包成msi格式和exe可執行文件。打包是一個成熟的應用程序一個重要的環節,希望這篇文章可以給大家一些參考,最后會講到打包時遇到的一些坑,與大家分享。

本文適用於有一些electron實踐經驗的小伙伴,知道如何創建一個簡單的electron應用,並且知道electron主進程、渲染進程間如何通信。

electron-packager

使用命令 npm install electron-packager --save-dev 安裝好之后會在package.json中的devDependencies生成代碼:

"devDependencies": { "electron-packager": "^9.1.0" }
注意:

1、打包時要分清devDependenciesdependencies的區別,文章后會講。
2、package.json 的額外字段 —— productName、author 和 description,雖然這幾個字段並不是打包必備的,但它們會在 Windows 的 Squirrel 安裝包(用於自動更新)中使用到,所以請讀者根據實際情況添加。

安裝好模塊之后,就可以對應用進行打包。electron-packager的打包基本命令是:

electron-packager <sourcedir> <appname> <platform> <architecture> <electron version> <optional options> 

參數說明:

  • sourcedir:項目所在路徑
  • appname:應用名稱
  • platform:確定了你要構建哪個平台的應用(Windows、Mac 還是 Linux)
  • architecture:決定了使用 x86 還是 x64 還是兩個架構都用
  • electron version:electron 的版本
  • optional options:可選選項

為了方便起見,在package.json中添加代碼:

"scripts": { "package": "electron-packager ./ myapp --out ./OutApp --version 1.7.9 --overwrite --icon=./app/img/icon/icon.ico" } 

然后在命令行中執行npm run package

命令行輸出

打包成功后,會在OutApp目錄(此處的目錄是在參數中配置的)下生成.exe,運行該文件,並且沒有報錯,則說明本次打包成功。

可執行的exe程序

特點:

1、支持平台有:Windows (32/64 bit)、OS X (also known as macOS)、Linux (x86/x86_64);
2、進行應用更新時,使用electron內置的autoUpdate進行更新
3、支持CLI和JS API兩種使用方式;

electron-builder

首先來看看什么是electron-builder,來自官方的解釋:

A complete solution to package and build a ready for distribution Electron, Proton Native or Muon app for macOS, Windows and Linux with “auto update” support out of the box.

簡單的說,electron-builder就是有比electron-packager有更豐富的的功能,支持更多的平台,同時也支持了自動更新。除了這幾點之外,由electron-builder打出的包更為輕量,並且可以打包出不暴露源碼的setup安裝程序。考慮到以上幾點,我果斷選擇了electron-builder &nbsp&nbsp&nbsp&nbsp&nbsp (微笑

首先,依舊是安裝依賴。
(這里官方強烈推薦使用yarn安裝依賴包,但我使用了npm安裝的依賴也可以正常打包,所以至於為什么官方強烈推薦用yarn,我還沒搞懂其原因,還請了解緣由的大佬們賜教)

yarn add electron-builder --save-dev

package.json中做如下配置

"build": { "appId": "com.xxx.app", "mac": { "target": ["dmg","zip"] }, "win": { "target": ["nsis","zip"] } }, "scripts": { "dist": "electron-builder --win --x64" },

在命令行中執行npm run dist ,執行結果如下:

使用electron-builder打包

打包后在dist目錄生成如下文件:

圖片描述

解壓zip包或執行setup安裝文件,應用啟動后且沒有報錯,則說明本次打包成功。

特點:

1、electron-builder 可以打包成msi、exe、dmg文件,macOS系統,只能打包dmg文件,window系統才能打包exe,msi文件;
2、幾乎支持了所有平台的所有格式;
3、支持Auto Update;
4、支持CLI和JS API兩種使用方式;

研究electron打包的過程中踩了不少坑,打包涉及到不少系統級別的問題,從最初的選型到最后的成功打包,看似是個簡單的過程,但其中仍有一些需要注意到的地方,我在這里分兩點說明:

devDependencies與dependencies的區別

dependencies 表示我們要在生產環境下使用該依賴,devDependencies 則表示我們僅在開發環境使用該依賴。在打包時,一定要分清哪些包屬於生產依賴,哪些屬於開發依賴,尤其是在項目較大,依賴包較多的情況下。若在生產環境下錯應或者少引依賴包,即便是成功打包,但在使用應用程序期間也會報錯,導致打包好的程序無法正常運行。

npm與cnpm的區別

說到npmcnpm的區別,可能大家都知道,但大家容易忽視的一點,是cnpm裝的各種node_module,這種方式下所有的包都是扁平化的安裝。一下子node_modules展開后有非常多的文件。導致了在打包的過程中非常慢。但是如果改用npm來安裝node_modules的話,所有的包都是樹狀結構的,層級變深。

由於這個不同,對一些項目比較大的應用,很容易出現打包過程慢且node內存溢出的問題(這也是在解決electron打包過程中困擾我比較久的問題,最后想到了npm與cnpm的這點不同,解決了node打包內存溢出的問題,從打包一次一小時優化到打包一次一分鍾,極大的提高了效率)。

所以建議大家在打包前,講使用cnpm安裝的依賴包刪除,替換成npm安裝的依賴包。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM