在上一篇文章中,我们介绍了electron的一些基础知识, 入门Electron,手把手教你编写完整实用案例,在这里我们将基于这个项目继续介绍Electron的打包和自动更新。
生成图标
在打包应用之前,要为应用准备一个图标,作为安装包图标。不同的操作系统所需图标的格式不同,Mac对应的格式为icns
,Windows对应的格式为ico
。
图标的生成可以借助 electron-icon-builder
。
- 首先,准备一张
1024*1024的png
图片,将图片放在项目文件夹中,我们这里选择放在tasky/public文件夹
中。
安装 electron-icon-builder:
npm i electron-icon-builder --D
在
package.json
的scripts
添加指令:"build-icon": "electron-icon-builder --input=./public/icon.png --output=build --flatten"
运行
npm run build-icon
,就会在build
文件夹中生成一系列打包所需的图标文件。
打包应用
Electron生态下常用的打包工具有两个:
electron-builder
和electron-packager
。
electron-builder
配置更灵活,使用也更广泛。下面,我们使用electron-builder
来进行打包。
安装
npm i electron-builder --D
配置
使用electron-builder
打包主要是各种配置,它支持两种配置方式:
在
package.json
中添加build
字段:"build": { "appId": "your.app.id" }
指定配置文件,在其中写入配置项。默认是项目根目录下的electron-builder.yml。
appId:"your.app.id"
在日常开发中,
package.json
这种配置方式比较常用,我们也以这种方式为主。基础配置
"build": { "appId": "this.is.tasky", "productName": "Tasky", "copyright": "Copyright © 2021 Alaso", "directories": { "buildResources": "build", //指定打包需要的静态资源,默认是build "output": "dist", //打包生成的目录,默认是dist } },
build文件夹放置的是,
electron-builder
默认的在打包过程中需要的静态文件,比如我们上面生成的图标文件;dist文件夹放置的是打包生成的各种文件。- 在
package.json
的scripts
添加指令:"pack": "electron-builder"
- 运行
npm run pack
基于以上的配置,electron-builder
会根据当前的操作系统打包出默认的文件。比如,在windows平台下,打包结果如下:
平台相关的配置
electron-builder
会自动识别当前的操作系统,打出系统对应的安装包。 这也意味着,如果要生成exe\msi,需要在Windows操作系统,如果是dmg,则需要在Mac操作系统。
electron-builder
的配置选项中,有很多跟操作系统相关的配置,可以对不同平台的打包做一些定制效果。下面以Windows和Mac为例,介绍一些常用的平台相关的配置。
1、Windows
"build": {
...
"win": {
"target": ["msi","nsis"], //安装包的格式,默认是"nsis"
"icon": "build/icons/icon.ico" //安装包的图标
},
//"target"值"nsis"打包出来的就是exe文件
//nsis是windows系统安装包的制作程序,它提供了安装、卸载、系统设置等功能
//关于"nsis"的一些配置
"nsis": {
"oneClick": false, //是否一键安装,默认为true
"language": "2052", //安装语言,2052对应中文
"perMachine": true, //为当前系统的所有用户安装该应用程序
"allowToChangeInstallationDirectory": true //允许用户选择安装目录
}
}
Mac
"build": { "mac": { "target": ["dmg", "zip"], //安装包的格式,默认是"dmg"和"zip" "category": "public.app-category.utilities" //应用程序安装到哪个分类下,具体有哪些分类可以在苹果官网上找 }, "dmg": { "background": "build/background.jfif", //安装窗口背景图 "icon": "build/icons/icon.icns", //安装图标 "iconSize": 100, //图标的尺寸 "contents": [ //安装图标在安装窗口中的坐标信息 { "x": 380, "y": 180, "type": "link", "path": "/Applications" }, { "x": 130, "y": 180, "type": "file" } ], "window": { //安装窗口的大小 "width": 540, "height": 380 } } }
会将哪些文件pack到安装包
在打包生成的文件夹中,会有一个
app.asar
,它是Electron应用程序的主业务文件压缩包,要知道项目中哪些文件被pack到安装包,可以通过解压app.asar
进行查看。
解压app.asar
需要借助asar工具,首先来安装:npm i asar -g
。
然后切换到app.asar
所在目录,执行:asar extract app.asar ./app-folder
。
以windows为例,app.asar
位于tasky\dist\win-unpacked\resources
目录中,解压后,可以看到app-folder中的内容如下:
可以看到,基本上就是项目所有文件了(除了package-lock.json
\ .gitignore
\ build
文件夹),并且还有node_modules
。
对于node_modules
,并不是所有node_modules
中的内容都会被打包进安装包,只有package.json
中dependencies
字段中的依赖会被打包,devDependencies
字段中的依赖则不会。 这是唯一规则,跟项目实际是否使用依赖没有关系。
所以,为了减小安装包体积,建议在渲染进程中使用的外部包,都安装在devDependencies
中,然后使用webpack将外部包的代码和业务代码打包到一起,在后面的文章中会详细介绍。
当然,可以通过配置files字段,来指定将哪些内容进行打包。
比如,我们只打包src文件夹
、index.js
和package.json
,可以这样配置:
"build": {
"files": [
"package.json",
"index.js",
"src/**/*"
]
}
自动更新
要自动更新,应用程序的安装包应该存放在互联网的某台服务器上,每次打开应用的时候,进行自动检测,根据当前应用程序的version
和线上版本进行匹配,当发现有新的version
的时候,就自动下载,下载完成后,询问用户是否安装新版本。
![在这里插入图片描述](https://img-blog.csdnimg.cn/7fe52fc2ef4549839913f21c2b519ab7.png)
打包不同版本
在package.json
中,有个"version"
字段,用于决定当前版本。
- step1: 设置
"version": "1.0.0"
,运行npm run pack
- step2: 设置
"version": "1.0.1"
, 运行npm run pack
虽然,我们没有改变应用程序的内容,但是会被识别成"1.0.0"和"1.0.1"两个版本。
搭建一个服务器放安装包
我们在本地启动一个服务器,放最新版本的安装包资源。
评论区