Electron 平台指南
Electron 是一个使用 Web 技术(HTML、CSS 和 JS)构建跨平台桌面应用程序的框架。
系统要求
Linux
- Python 版本 2.7.x。建议检查您的 Python 版本,因为某些发行版(如 CentOS 6.x)仍然使用 Python 2.6.x。
Mac
- Python 版本 2.7.x,支持 TLS 1.2。
- Xcode,macOS 的 IDE,捆绑了必要的软件开发工具,用于代码签名和编译 macOS 的本机代码。版本 8.2.1 或更高版本。
- RedHat 构建支持
Windows
- Python 版本 2.7.10 或更高版本。
- PowerShell,对于 Windows 7 用户,必须为 3.0 或更高版本才能进行 应用签名。
- Windows 调试工具 是一个增强调试功能的工具包。建议与 Windows SDK 10.0.15063.468 一起安装。
快速开始
创建项目
npm i -g cordova
cordova create sampleApp
cd sampleApp
cordova platform add electron
注意:如果使用 9.x 之前的 Cordova CLI 版本,您需要为任何需要平台名称的命令使用 cordova-electron 参数而不是 electron。例如
cordova platform add cordova-electron
cordova run cordova-electron
预览项目
无需构建 Electron 应用程序即可进行预览。由于构建过程可能很慢,建议在预览时传入 --nobuild 标志以禁用构建过程。
cordova run electron --nobuild
构建项目
调试构建
cordova build electron
cordova build electron --debug
发布构建
cordova build electron --release
自定义应用程序的窗口选项
Electron 提供了许多选项来操作 BrowserWindow。本节将介绍如何配置一些基本选项。有关选项的完整列表,请参阅 Electron 文档 - BrowserWindow 选项。
在使用 Cordova 项目时,建议在项目的根目录中创建一个 Electron 设置文件,并在 config.xml 文件中的首选项选项 ElectronSettingsFilePath 中设置其相对路径。
示例 config.xml
<platform name="electron">
<preference name="ElectronSettingsFilePath" value="res/electron/settings.json" />
</platform>
要覆盖或设置任何 BrowserWindow 选项,在此文件中,这些选项将添加到 browserWindow 属性。
示例 res/electron/settings.json
{
"browserWindow": { ... }
}
如何设置窗口的默认大小
默认情况下,width 设置为 800,height 设置为 600。可以通过设置 width 和 height 属性来覆盖此设置。
示例
{
"browserWindow": {
"width": 1024,
"height": 768
}
}
如何禁用窗口调整大小
通过设置 resizable 标志属性,您可以禁用用户调整应用程序窗口大小的能力。
示例
{
"browserWindow": {
"resizable": false
}
}
如何使窗口全屏显示
使用 fullscreen 标志属性,您可以强制应用程序以全屏模式启动。
示例
{
"browserWindow": {
"fullscreen": true
}
}
如何支持 Node.js 和 Electron API
将 nodeIntegration 标志属性设置为 true。默认情况下,此属性标志设置为 false,以支持使用与 Node.js 和 Electron 已使用的相同名称插入符号的常用库。
您可以在 Electron 文档中阅读更多相关信息:我无法在 Electron 中使用 jQuery/RequireJS/Meteor/AngularJS。
示例
{
"browserWindow": {
"webPreferences": {
"nodeIntegration": false
}
}
}
自定义 Electron 的主进程
如果需要自定义 Electron 的主进程,超出 Electron 配置设置的范围,则可以直接将更改添加到位于 {PROJECT_ROOT_DIR}/platform/electron/platform_www/ 中的 cdv-electron-main.js 文件。这是应用程序的主进程。
❗ 但是,不建议修改此文件,因为
cordova-electron的升级过程是在添加新版本之前删除旧平台。
开发者工具
--release 和 --debug 标志控制开发者工具的可见性。默认情况下,开发者工具在调试构建(没有标志或带有 --debug)中显示。如果您想隐藏开发者工具,请在构建或运行应用程序时传入 --release 标志。
注意:可以使用调试构建手动关闭或打开开发者工具。
构建配置
默认构建配置
默认情况下,在没有其他配置的情况下,cordova build electron 将为触发命令的主机操作系统 (OS) 构建默认包。以下是每个操作系统的默认包列表。
Linux
| 包 | 架构 |
|---|---|
| tar.gz | x64 |
Mac
| 包 | 架构 |
|---|---|
| dmg | x64 |
| zip | x64 |
Windows
| 包 | 架构 |
|---|---|
| nsis | x64 |
自定义构建配置
如果出于任何原因您想自定义构建配置,则将修改放置在项目根目录中的 build.json 文件中。例如 {PROJECT_ROOT_DIR}/build.json。此文件包含所有平台(Android、Electron、iOS、Windows)的所有构建配置。
示例配置结构
{
"electron": {}
}
由于 Electron 框架用于创建跨平台应用程序,因此每个操作系统构建都需要多个配置。build.json 文件中的 electron 节点包含三个属性,用于分隔每个操作系统的构建配置。
具有每个平台的示例配置结构
{
"electron": {
"linux": {},
"mac": {},
"windows": {}
}
}
每个操作系统节点都包含用于标识要生成哪个包以及如何签名的属性。
操作系统属性
package是要生成的包格式的数组。arch是每个包构建的架构数组。signing是一个包含签名信息的对象。有关更多信息,请参阅 签名配置。
任何未定义的属性都将回退为默认值。
添加 package
package 属性是要输出的包的数组列表。如果定义了该属性,则除非添加,否则不会使用默认包。包的顺序无关紧要。
以下配置示例将为 macOS 生成 tar.gz、dmg 和 zip 包。
{
"electron": {
"mac": {
"package": [
"dmg",
"tar.gz",
"zip"
]
}
}
}
按操作系统提供的包
| 包类型 | Linux | macOS | Windows |
|---|---|---|---|
| 默认 | - | dmgzip |
- |
| dmg | - | ✅ | - |
| mas | - | ✅ | - |
| mas-dev | - | ✅ | - |
| pkg | - | ✅ | - |
| 7z | ✅ | ✅ | ✅ |
| zip | ✅ | ✅ | ✅ |
| tar.xz | ✅ | ✅ | ✅ |
| tar.lz | ✅ | ✅ | ✅ |
| tar.gz | ✅ | ✅ | ✅ |
| tar.bz2 | ✅ | ✅ | ✅ |
| dir | ✅ | ✅ | ✅ |
| nsis | - | - | ✅ |
| nsis-web | - | - | ✅ |
| portable | - | - | ✅ |
| appx | - | - | ✅ [1] |
| msi | - | - | ✅ |
| AppImage | ✅ | - | - |
| snap | ✅ | - | - |
| deb | ✅ | - | - |
| rpm | ✅ | - | - |
| freebsd | ✅ | - | - |
| pacman | ✅ | - | - |
| p5p | ✅ | - | - |
| apk | ✅ | - | - |
- [1] 只有 Window 10 可以构建 AppX 包。
设置包 arch
arch 属性是每个包构建的架构的数组列表。定义该属性后,除非添加,否则不会使用默认 arch。
❗ 并非所有架构都适用于每个操作系统。请查看 Electron 版本 以确定有效的组合。例如,macOS (Darwin) 仅支持 x64。
可用架构
- ia32
- x64
- armv7l
- arm64
上面的示例将生成一个 x64 dmg 包。
{
"electron": {
"mac": {
"package": [ "dmg" ],
"arch": [ "x64" ]
}
}
}
多平台构建支持
❗ 并非所有平台都支持此功能,并且可能存在限制。
在单个操作系统上构建多个平台是可能的,但有限制。建议构建器的操作系统(主机操作系统)与正在构建的平台相匹配。
下表显示了每个主机操作系统及其能够构建应用程序的平台。
| 主机 [1] | Linux | Mac | Windows |
|---|---|---|---|
| Linux | ✅ | ❗ [2] | |
| Mac [3] | ✅ | ✅ | ❗ [2] |
| Windows | ✅ |
限制
- [1] 如果应用程序包含本机依赖项,则只能在目标平台上进行编译。
- [2] Linux 和 macOS 无法为 Windows 商店构建 Windows Appx 包。
- [3] 除了 rpm,所有必需的系统依赖项都将按需自动下载。可以使用 brew 安装 RPM。(macOS Sierra 10.12+)
以下示例启用了所有操作系统的多平台构建,并使用默认的构建配置。
{
"electron": {
"linux": {},
"mac": {},
"windows": {}
}
}
签名配置
macOS 签名
有三种类型的签名目标。(debug、release 和 store)。每个部分都有以下属性
| key | description |
|---|---|
| entitlements | 授权文件的字符串路径值。 |
| entitlementsInherit | 继承安全设置的授权文件的字符串路径值。 |
| identity | 证书名称的字符串值。 |
| requirements | 需求文件的字符串路径值。 ❗ 这不适用于 mas(商店)签名配置。 |
| provisioningProfile | 配置文件字符串路径值。 |
示例配置
{
"electron": {
"mac": {
"package": [
"dmg",
"mas",
"mas-dev"
],
"signing": {
"release": {
"identity": "APACHE CORDOVA (TEAMID)",
"provisioningProfile": "release.mobileprovision"
}
}
}
}
}
对于 macOS 签名,签名信息的使用方式有一些例外。默认情况下,除 mas 和 mas-dev 之外的所有包都使用 debug 和 release 签名配置。
使用上面的示例配置,让我们回顾一些用例,以便更好地理解这些例外。
用例 1
cordova build electron --debug
上面的命令将
- 使用
debug签名配置生成dmg构建和mas-dev构建。 - 忽略
mas目标包。
用例 2
cordova build electron --release
上面的命令将
- 使用
release配置生成dmg构建。 - 使用
store配置生成mas构建。 - 忽略
mas-dev目标包。
Windows 签名
签名信息由两种类型组成。(debug,release)。每个部分都有以下属性
| key | description |
|---|---|
| certificateFile | 证书文件的字符串路径。 |
| certificatePassword | 证书文件的密码的字符串值。 替代方案:可以在环境变量 CSC_KEY_PASSWORD 上设置密码。 |
| certificateSubjectName | 签名证书主题的字符串值。 ❗ EV 代码签名需要,并且需要 Windows |
| certificateSha1 | 签名证书的 SHA1 哈希值的字符串值。 ❗ 需要 Windows |
| signingHashAlgorithms | 要使用的签名算法的集合。(sha1, sha256)❗ AppX 构建仅支持 sha256 |
| additionalCertificateFile | 附加证书文件的字符串路径。 |
示例配置
{
"electron": {
"windows": {
"package": [ "nsis" ],
"signing": {
"release": {
"certificateFile": "path_to_files",
"certificatePassword": "password"
}
}
}
}
}
Linux 签名
Linux 构建没有签名要求。
插件
所有基于浏览器的插件都可以在 Electron 平台上使用。
添加插件时,如果插件同时支持 electron 和 browser 平台,则将使用 electron 部分。如果插件缺少 electron 但包含 browser 实现,则会回退到 browser 实现。
在内部,Electron 使用 Chromium (Chrome) 作为其 Web 视图。某些插件可能针对不同的浏览器编写了特定的条件。在这种情况下,可能会影响预期行为。由于 Electron 可能支持浏览器不支持的功能,因此可能需要为 electron 平台更新这些插件。