electron 打包:electron-packager 及 electron-builder 两种方式实现(for Windows)

本文由 简悦 SimpRead 转码, 原文地址 www.cnblogs.com

前言

本文主要介绍如何通过 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,运行该文件,并且没有报错,则说明本次打包成功。

特点:

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 ,执行结果如下:

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

![][img-4]

解压 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安装的依赖包。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值