开发electron客户端程序,打包是绕不开的问题。下面就我在工作中的经验以及目前对electron-builder的了解来分享一些心得。

基本概念

官网的定义

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.

关于electronelectron-builder的基础部分这篇文章就跳过了,有兴趣的话可以看这篇文章

如何使用

builder的使用和配置都是很简单的 builder配置有两种方式

  • package.json中直接配置使用(比较常用,我们下面着重来讲这个)
  • 指定electron-builder.yml文件

demo地址会在文章末尾给出(demo项目中electron使用得是V2.0.7版本,目前更高得是2.0.8版本)。

下面是一个简单的package.js中带注释的配置

  1. 基础配置
"build": {  // 这里是electron-builder的配置"productName":"xxxx",//项目名 这也是生成的exe文件的前缀名"appId": "com.xxx.xxxxx",//包名  "copyright":"xxxx",//版权  信息"directories": { // 输出文件夹"output": "build"}, // windows相关的配置"win": {  "icon": "xxx/icon.ico"//图标路径 }  }复制代码

在配置文件中加入以上的文件之后就可以打包出来简单的文件夹,文件夹肯定不是我们想要的东西。下一步我们来继续讲别的配置。 2. 打包目标配置 要打包成安装程序的话我们有两种方式,

  1. 使用NSIS工具对我们的文件夹再进行一次打包,打包成exe
  2. 通过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那么应用程序就会自动的安装在C盘。没有用户选择的余地,这样肯定是不行的

关于nsis的配置是在build中nsis这个选项中进行配置,下面是部分nsis配置

"nsis": {"oneClick": false, // 是否一键安装"allowElevation": true, // 允许请求提升。 如果为false,则用户必须使用提升的权限重新启动安装程序。"allowToChangeInstallationDirectory": true, // 允许修改安装目录"installerIcon": "./build/icons/aaa.ico",// 安装图标"uninstallerIcon": "./build/icons/bbb.ico",//卸载图标"installerHeaderIcon": "./build/icons/aaa.ico", // 安装时头部图标"createDesktopShortcut": true, // 创建桌面图标"createStartMenuShortcut": true,// 创建开始菜单图标"shortcutName": "xxxx", // 图标名称"include": "build/script/installer.nsh", // 包含的自定义nsis脚本 这个对于构建需求严格得安装过程相当有用。
},复制代码

关于includescript 到底选择哪一个 ?

在对个性化安装过程需求并不复杂,只是需要修改一下安装位置,卸载提示等等的简单操作建议使用include配置,如果你需要炫酷的安装过程,建议使用script进行完全自定义。

NSIS对于处理安装包这种东西,功能非常的强大。但是学习起来并不比一门高级语言要容易。其中的奥秘还要各位大佬自行探索

这里上一些学习资源

  • NSIS初级篇
  • NSIS 打包脚本基础
  • 示例脚本
  • NSIS论坛
  1. 关于操作系统的配置

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

CLI参数

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", // 服务器提供商 也可以是GitHub等等"url": "http://xxxxx/" // 服务器地址}
],复制代码

完整配置

基本上可用的完整的配置

"build": {"productName":"xxxx",//项目名 这也是生成的exe文件的前缀名"appId": "com.leon.xxxxx",//包名  "copyright":"xxxx",//版权  信息"directories": { // 输出文件夹"output": "build"}, "nsis": {"oneClick": false, // 是否一键安装"allowElevation": true, // 允许请求提升。 如果为false,则用户必须使用提升的权限重新启动安装程序。"allowToChangeInstallationDirectory": true, // 允许修改安装目录"installerIcon": "./build/icons/aaa.ico",// 安装图标"uninstallerIcon": "./build/icons/bbb.ico",//卸载图标"installerHeaderIcon": "./build/icons/aaa.ico", // 安装时头部图标"createDesktopShortcut": true, // 创建桌面图标"createStartMenuShortcut": true,// 创建开始菜单图标"shortcutName": "xxxx", // 图标名称"include": "build/script/installer.nsh", // 包含的自定义nsis脚本},"publish": [{"provider": "generic", // 服务器提供商 也可以是GitHub等等"url": "http://xxxxx/" // 服务器地址}],"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"}}复制代码

命令行参数(CLI)

Commands(命令):

  electron-builder build                    构建命名                      [default]electron-builder install-app-deps         下载app依赖electron-builder node-gyp-rebuild         重建自己的本机代码electron-builder create-self-signed-cert  为Windows应用程序创建自签名代码签名证书electron-builder start                    使用electronic-webpack在开发模式下运行应用程序(须臾要electron-webpack模块支持)复制代码

Building(构建参数):

  --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      预打包应用程序的路径(以可分发的格式打包)--projectDir, --project  项目目录的路径。 默认为当前工作目录。--config, -c             配置文件路径。 默认为`electron-builder.yml`(或`js`,或`js5`)
复制代码

Publishing(发布):

  --publish, -p  发布到GitHub Releases [choices: "onTag", "onTagOrDraft", "always", "never", undefined]复制代码

Deprecated(废弃):

  --draft       请改为在GitHub发布选项中设置releaseType                 [boolean]--prerelease  请改为在GitHub发布选项中设置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构建(同时构建)electron-builder --linux deb tar.xz          为Linux构建deb和tar.xzelectron-builder -c.extraMetadata.foo=bar    将package.js属性`foo`设置为`bar`electron-builder --config.nsis.unicode=false 为NSIS配置unicode选项复制代码

TargetConfiguration(构建目标配置):

target:  String - 目标名称,例如snap.
arch “x64” | “ia32” | “armv7l” | “arm64”> | “x64” | “ia32” | “armv7l” | “arm64”  -arch支持列表复制代码

常见的错误

  • NPM下载的问题

    因为NPM在国内比较慢。导致electron-V.xxxx.zip下载失败。这些东西如果是第一次打包的话是需要下载对应electron版本的支持文件。解决办法有两个

    1. 设置镜像:在C盘User中找到.npmrc文件。然后加入下面这句代码,但是这个有时候也不是很好用
    ELECTRON_MIRROR=http://npm.taobao.org/mirrors/electron/
    复制代码
    1. 直接去淘宝镜像文件库找到对应的文件并下载,放到指定的目录下,electron的淘宝镜像地址。下载完之后放到指定的文件。一般文件得地址在C:\Users\Administrator\AppData\Local\electron\Cache。例如我要下载1.8.4版本的electron,那么找到镜像下得文件然后放到指定文件夹中。

    (如果是在执行npm install时下载不下来)直接在淘宝镜像下载对应版本的zip,然后扔到C:\Users\YourUserName.electron就行

    这就解决了这个问题,简单又暴力。

  • NSIS下载问题

    如果你要打NSIS得包还需要西再下载nsis-resources-xxx等等包。经过上面得经验这下我们知道缺什么就填什么呗,通过错误日志我们可以得到我们要下载得版本,一般错误中通常会展示github下载地址,直接点开连接去下载。但是位置这次不一样了。因为这是electron-builder的支持环境所以我们要放在C:\Users\Administrator\AppData\Local\electron-builder\cache\nsis\下了。

一般情况下解决这些问题的思路就是,缺什么拿什么?。

总结

electron-builder是一个简单又强大的库。解决了打包这个棘手的问题,而且可以应对大部分的打包需求。

Demo地址

转载于:https://juejin.im/post/5c886e16e51d45219d442549

Electron-builder打包详解相关推荐

  1. Electron vue使用详解

    Electron  vue使用详解 Electron是什么? Electron 是一个框架,可以让您使用 JavaScript, HTML 和 CSS 创建桌面应用程序. 然后这些应用程序可以打包在m ...

  2. electron builder 打包错误 cannot unpack electron zip file 解决方案

    electron builder 打包错误 cannot unpack electron zip file 解决方案 参考文章: (1)electron builder 打包错误 cannot unp ...

  3. linux中的文件夹压缩文件,linux将文件拷贝到目录下Linux下文件的压缩与打包详解...

    在Linux中,有很多的压缩命令.利用这些压缩命令,可以方便的从网络上下载大型的文件.同时,我们知道,Linux文件的扩展名是没有特殊意义的,不过,因为Linux下存在着许多压缩命令,所以为了方便记忆 ...

  4. Maven打包详解(“There are test failures”)

    Maven打包详解("There are test failures") 以下操作都是在IDEA软件内进行的. 第一步:idea界面中选择右边的Maven projects 界面: ...

  5. Hadoop基础-Idea打包详解之手动添加依赖(SequenceFile的压缩编解码器案例)

    Hadoop基础-Idea打包详解之手动添加依赖(SequenceFile的压缩编解码器案例) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.编辑配置文件(pml.xml)(我 ...

  6. Android-使用Jenkins自动化打包详解-Linux篇

    文章目录 购买和使用阿里云 安装宝塔面板 安装Tomcat 安装 jenkins 配置jenkins 设置FTP jenkins 常规操作 修改admin密码 购买和使用阿里云 首先购买阿里云,可从以 ...

  7. webpack文件夹打包_webpack多入口文件页面打包详解

    本文主要介绍了webpack多入口文件页面打包配置详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧,希望帮助到大家. 大多数情况下,我们使用 webpack来打包单页应 ...

  8. UE4 IOS打包详解

    写在前面:因为是详解,所以可能写的有可能啰嗦,也有可能有些步骤是你经历过的,那么请忽略它,向下寻找可能的答案,如果没能解决你的问题,那么对此感到很抱歉,没能帮到你,欢迎你给我邮件: bluecode6 ...

  9. linux打包tar包命令,Linux tar 命令压缩解压打包详解

    Linux中压缩解压打包命令中用的最多的tar命令.tar命令是Unix/Linux系统中备份文件的可靠方法,几乎可以工作于任何环境中,它的使用权限是所有用户.在使用tar的参数需要区分大小写,参数写 ...

最新文章

  1. Spring 自动化装配Bean
  2. Putty自动登陆远程Linux主机
  3. 迁移到阿里云后,NTKO控件报存word 报文件存取错误,请检查网络传输。
  4. Streaming Big Data: Storm, Spark and Samza--转载
  5. JS特效 -- 网页图片飞起来
  6. Openfiler + Redhat 5.4 Oracle 11gR2 RAC 安装文档
  7. 从一个视图控制器切换到另一个视图控制器的几种方式
  8. 关于原型污染漏洞的完整指南
  9. CAN总线基础知识(二)
  10. Oracle数据库编译存储过程挂死问题解决办法
  11. linux ftp 500误,Linux Vsftp报错500 OOPS如何修复
  12. oneUI 如何获取swtch值
  13. vba 读取linux换行符,【VBA研究】清除字符串中的回车换行符
  14. Android 源码分析
  15. 【笔记】Polygon mesh processing读书笔记(5)
  16. Node rar压缩/解压文件
  17. Hadoop 中的数据类型
  18. Nokia 5530XM
  19. php短信炸弹,php发送短信炸弹
  20. 【论文阅读|深读】SDNE:Structural Deep Network Embedding

热门文章

  1. 让 QtWebkit 支持跨域CROS - nowboy的CSDN博客 - 博客频道 - CSDN.NET
  2. 技术人员如何转型为产品经理
  3. 【专题】“莓日一介”之(BlackBerry 7230“经典”)
  4. Prim算法生成迷宫
  5. select的value值为对象时,获取label和value
  6. 我们前端忙成狗人家后端写SQL?
  7. Linux排序命令sort详解
  8. Winform开发框架之系统重新登录、自动登录实现
  9. JDBC编程专题4之JDBC驱动程序类型
  10. 用户空间与内核空间数据交换的方式(zz)