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阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容