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
的升级过程是在添加新版本之前删除旧平台。
DevTools
--release
和 --debug
标志控制 DevTools 的可见性。DevTools 在 调试构建(没有标志
或使用 --debug
)中默认显示。如果要隐藏 DevTools,请在构建或运行应用程序时传入 --release
标志。
注意:DevTools 可以使用调试构建手动关闭或打开。
构建配置
默认构建配置
默认情况下,在没有其他配置的情况下,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 框架用于创建跨平台应用程序,因此每个 OS 构建都需要多个配置。build.json
文件中的 electron
节点包含三个属性,用于分离每个 OS 的构建配置。
每个平台的示例配置结构
{
"electron": {
"linux": {},
"mac": {},
"windows": {}
}
}
每个 OS 节点包含用于识别要生成的包以及如何签名的属性。
OS 属性
package
是将要生成的包格式的数组列表。arch
是每个包构建的架构的数组列表。signing
是一个包含签名信息的 object。有关更多信息,请参阅 签名配置。
任何未定义的属性将回退到默认值。
添加 package
package
属性是将要输出的包的数组列表。如果定义了此属性,则不会使用默认包,除非添加。包的顺序无关紧要。
下面的配置示例将为 macOS 生成 tar.gz
、dmg
和 zip
包。
{
"electron": {
"mac": {
"package": [
"dmg",
"tar.gz",
"zip"
]
}
}
}
按操作系统提供的包
包类型 | Linux | macOS | Windows |
---|---|---|---|
default | - | dmg zip |
- |
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
属性是每个包构建的架构的数组列表。当定义了此属性时,不会使用默认架构,除非添加。
❗ 并非所有架构都适用于所有操作系统。请查看 Electron 版本 以识别有效的组合。例如,macOS (Darwin) 仅支持 x64。
可用架构
- ia32
- x64
- armv7l
- arm64
上面的示例将生成一个 x64
dmg
包。
{
"electron": {
"mac": {
"package": [ "dmg" ],
"arch": [ "x64" ]
}
}
}
多平台构建支持
❗ 并非所有平台都支持此功能,并且可能存在限制。
在单个操作系统上构建多个平台可能是可能的,但存在限制。建议构建器的操作系统 (主机 OS) 与正在构建的平台匹配。
下面的矩阵显示了每个主机 OS 以及它们能够构建应用程序的平台。
主机 [1] | Linux | Mac | Windows |
---|---|---|---|
Linux | ✅ | ❗ [2] | |
Mac [3] | ✅ | ✅ | ❗ [2] |
Windows | ✅ |
限制
- [1] 如果应用包含原生依赖项,则只能在目标平台上编译。
- [2] Linux 和 macOS 无法为 Windows Store 构建 Windows Appx 包。
- [3] 除了 rpm 之外,所有必需的系统依赖项都将在需要时自动下载。RPM 可以使用 brew 安装。(macOS Sierra 10.12+)
下面的示例为所有 OS 启用多平台构建,并使用默认构建配置。
{
"electron": {
"linux": {},
"mac": {},
"windows": {}
}
}
签名配置
macOS 签名
有三种类型的签名目标。(debug
、release
和 store
)。每个部分都具有以下属性
key | description |
---|---|
entitlements | 指向权利文件的字符串路径值。 |
entitlementsInherit | 指向继承安全设置的权利文件的字符串路径值。 |
identity | 证书名称的字符串值。 |
requirements | 指向需求文件的字符串路径值。 ❗ 这不适用于 mas (store)签名配置。 |
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
平台进行更新。