打包Electron应用
手动打包Electron比较繁琐,现在有两个自动打包Electron应用的工具:
自动打包工具会带来很多好处,他会自动帮你打包多个平台的安装包(windows/macos/linux),还会集成自动更新功能。这里我使用的是electron-builder
。
Quick Start
安装:
1 | npm i --save-dev electron-builder |
确保你的package.json
中包含这些字段:name
, description
, version
and author
。
在pacpackage.json
中添加build
属性:
1 | "build": { |
全部的属性说明见all options。
在项目根目录下建立build
文件夹,其中存放三个图片:
- background.png (macOS DMG background)
- icon.icns (macOS app icon)
- icon.ico (Windows app icon)
在package.json
中添加两个script命令:
1 | "scripts": { |
然后运行npm run dist
就行啦!默认会在项目目录的dist目录下生成可执行程序,安装包和zip包。比如我在mac上生成的例子:
1 | . |
其中github
目录是用于自动更新的。
定制
默认输出目录在dist
。修改输出目录可以在build
属性中添加配置:
1 | "directories": { |
asar格式
asar格式是Electron项目组推出的一种文件打包格式,官网介绍如下:
Asar is a simple extensive archive format, it works like tar that concatenates all files together without compression, while having random access support.
Asar是一个简单的可扩展的打包格式,类似于tar那样把所有文件不带压缩地打包到一个文件中,并且支持随机访问
支持随机访问是一个亮点吧,这样所谓Electron App的载体,传输更方便了,但是访问速度不会降低很多。
安装:
1 | npm install -g asar |
查看一个asar包中的文件:
1 | asar list x.asar |
在应用中访问asar
Electron应用中支持两种方式来访问asar:
1 Node APIs provided by Node.js
Electron对nodejs做了一些补丁,所以像fs.readFile
和require
可以像访问普通目录一样访问asar文件。
1 | // 读取打包文件中的资源 |
2 Web APIs provided by Chromium
在网页中可以使用file协议来访问asar中的文件:
1 | <script> |
参考资料
- electron/application-distribution.md at master · electron/electron
- electron-userland/electron-builder: A complete solution to package and build a ready for distribution Electron app with “auto update” support out of the box
asar: