electron將vue項目打包成桌面應用(.dmg/.exe)

electron官網(中文)

情況介紹

使用Vue進行項目開發,希望將Vue項目打包成桌面應用(包括mac和windows兩個平臺)
我這里介紹一下在已有Vue項目情況下,添加關于electron的打包步驟以及過程中常見的問題
使用的依賴版本:

    "electron": "^7.1.7",
    "electron-builder": "^21.2.0"
實現步驟

先確保電腦里已有node環境,使用node -v查看,如出現版本則代表已有環境,我項目上用的是12.x版本以上,如沒有請移步node下載官網下載安裝

1.首先需要在根目錄下安裝electron:npm install --save-dev electron
2. 新建主進程main.js文件,記得修改loadFile路徑為項目里build出的靜態資源包地址,如下:

const { app, BrowserWindow } = require('electron')
let mainWindow
let windowConfig = { // 窗口配置程序運行窗口的大小
  width: 1000,
  height: 800,
}
function createWindow () {
  mainWindow = new BrowserWindow(windowConfig)
  mainWindow.show()
  mainWindow.loadFile('www/index.html') // 項目里build出的靜態資源包地址為www,
  mainWindow.webContents.openDevTools() // electron窗口打開調試工具
  mainWindow.on('closed', function () {
    mainWindow = null
  })
  mainWindow.on('resize', () => {
    mainWindow.reload()
  })
}

app.on('ready', () => {
  createWindow()
  const { Menu } = require('electron')
  Menu.setApplicationMenu(null) // window下 隱藏菜單欄
})
app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') app.quit()
})

app.on('activate', function () {
  if (mainWindow === null) createWindow()
  console.log(this, 'main')
})

3.打包

  • 使用 electron-packager 方式
    (1) 添加依賴
    npm install electron-packager --save-dev 或者 yarn add electron-packager --save-dev
    如沒有添加yarn環境可:npm install -g yarn
    (2) 在 package.json文件中構建打包命令
    "packager": "electron-packager . release --platform=darwin --arch=x64 --icon=build/icon.png --out=./dist --asar --app-version=1.0.0  --overwrite --ignore=\"(release|dist|src|docs|.gitignore|LICENSE|README.md|webpack.config*|node_modules)\""

這里我指定的平臺和系統架構是適用mac上,可以自定義指定,模板如下:

    "package": "electron-packager . '應用名稱' --platform=‘平臺’ --arch=‘系統架構’ --icon=‘應用圖片’ --out=‘輸出目錄’ --asar --app-version=‘版本’ --ignore=‘忽略文件’",

個人使用electron-packager 可以打成執行應用程序,但是命令行冗長,且不如electron-builder支持可配置,包括平臺打包配置、nsis配置等等,所以最后項目上還是決定使用electron-builder

  • 使用 electron-builder 方式(建議分平臺打包)
    (1) 添加依賴
    npm install electron-builder --save-dev 或者 yarn add electron-builder --save-dev
    如沒有添加yarn環境可:npm install -g yarn
    (2) 修改 package.json文件
    build參數配置:
"name": "XXX",
"version": "1.0.0",
"build": {
    "appId": "com.electron.app",
    "copyright": "Copyright ***",
    "productName": "Electron",
    "files": [
      "!dist/**/*"
    ],
    "mac": {
      "icon": "build/icon.png", // 應用程序圖標
      "category": "public.app-category.productivity",
      "artifactName": "${productName}_${version}.${ext}", // 應用程序包名
      "target": [
        "dmg",
        "zip"
      ]
    },
    "win": {
      "icon": "build/icon.png",
      "artifactName": "${productName}_${version}.${ext}",
      "verifyUpdateCodeSignature": false,
      "target": [
        {
          "target": "nsis",
          "arch": [
            "ia32"
          ]
        }
      ]
    },
    "nsis": { 
      "oneClick": false, // 是否一鍵安裝
      "createDesktopShortcut": "always", // 是否添加桌面快捷方式
      "allowToChangeInstallationDirectory": true,// 允許修改安裝目錄
    },
    "extends": null
  }

ps:build中可以適當增加nsis配置,可以優化用戶體驗,比如是否允許用戶一鍵安裝、自定義安裝位置、是否添加桌面快捷方式、安裝完成是否立即啟動、配置安裝圖標等等。更多詳細參數配置可參見官方文檔 nsis配置

scripts中構建命令:

    "electron": "electron .",  // 啟動electron 窗口
    "dist": "npm run build && electron-builder", // 使用electron-builder進行打包,先生成靜態資源包再進行electron打包

執行npm run dist進行打包(其中npm run build是項目靜態資源包生成的命令),生成dmg或者exe執行文件,以下是我在mac上打的包:


image.png

注意:此時electron-builder后面沒有指定平臺和系統,打包的時候會參考當前操作系統的架構和平臺進行打包,也就是說,electron-builder如果在不同的操作系統上運行結果也是不一樣的,在mac上打出dmg,windows下生成exe,需要指定平臺和系統架構的話可以參考:

格式:electron-builder --platform --arch
platform是配置打包成什么平臺的安裝文件:
win系統: win32
mac系統:darwin
Linux系統:linux
arch是指定系統是什么架構的,常見的例如32位和64位操作系統:
ia32,32位操作系統,也可以在64位操作系統中安裝
x64, 64位操作系統,使用本架構打包無法再32位操作系統中安裝

還有需要注意的一點是:mac上不簽名也可以打包成功,安裝的時候還要更改電腦權限,但是涉及到自動更新、發布到 app store等功能則不能用。所以說MAC包一定要添加代碼簽名,參考地址:code-signing

常見的問題

1.添加electron相關依賴報錯
(1)設置淘寶鏡像源:npm config set registry=http://registry.npm.taobao.org/
(2)設置環境變量并安裝
Mac系統:
ELECTRON_MIRROR=http://npm.taobao.org/mirrors/electron/ npm install
Windows系統:
set "ELECTRON_MIRROR=http://npm.taobao.org/mirrors/electron" && npm install
注意:在問題解決完之后記得將鏡像恢復一下,避免其他的錯誤:
npm config set registry https://registry.npmjs.org/
或者切換一下 4G熱點,我就是在下載依賴的時候一路爬坑,最后還是在4G熱點的情況下成功添加依賴的

2.electron-build的時候下載electron報錯
第一次執行打包指令的時候, 會非常非常的慢, 甚至可能會失敗, 通常的原因是下載速度太慢,下載到最后就已經是0kB/s了

image.png

剛開始在windows系統下electron-build的時候我遇到electron-v7.1.7-win32-ia32.zip 這個包一直下載不下來,由于electron-builder 在打包時會檢測cache中是否有electron 包,如果沒有的話會從github上拉去,在國內網絡環境中拉取的過程大概率會失敗,所以可以通過離線下載的方式將提示的包下下來然后放到對應的目錄里面就可以,另外不僅要下載這個壓縮包,還要把對應的SHASUMS256.txt-文件也下載下來放進去,不然也會打包報錯,下載地址和壓縮包地址一致。
報錯提示里面的github地址下載不了的話移步這個地址下載:淘寶鏡像下載地址
目錄地址
MacOS: /Users/xxx/Library/Caches/electron/
Windows: C:\Users\xxx\AppData\Local\electron\Cache

壓縮包.png

txt.png

需要注意的是,在打包過程中并不是所有的依賴包添加都有問題,像我這里就只遇到了這個壓縮包文件下載的問題,但是有一些人可能winCodeSign、nsis等文件都不能下載成功,如遇到可以根據報錯命令提示去提示的地址離線下載放到對應目錄下即可。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
禁止轉載,如需轉載請通過簡信或評論聯系作者。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,333評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,491評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,263評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,946評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,708評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,409評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,939評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,774評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,641評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,872評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,650評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容