跳到主要内容

Electron 21.0.0

·3 分钟阅读

Electron 21.0.0 已发布!它包括 Chromium 106、V8 10.6 和 Node.js 16.16.0 的升级。阅读下文了解更多详情!


Electron 团队很高兴地宣布 Electron 21.0.0 的发布!您可以通过 npm 使用 npm install electron@latest 安装它,或者从我们的 发布网站 下载它。继续阅读以了解有关此版本的详细信息。

如果您有任何反馈,请在 Twitter 上与我们分享,或加入我们的社区 Discord!错误和功能请求可以在 Electron 的 issue tracker 中报告。

值得注意的更改

堆栈更改

新功能

  • 添加了 webFrameMain.origin#35534
  • 添加了新的 WebContents.ipcWebFrameMain.ipc API。 #35231
  • 添加了对面板式行为的支持。窗口可以浮动在全屏应用程序之上。 #34388
  • 为 macOS 应用程序添加了对来自 APNs 的推送通知的支持。 #33574

重大 & API 更改

以下是 Electron 21 中引入的重大更改。

V8 内存隔离区已启用

Electron 21 启用了 V8 沙盒指针,遵循 Chrome 在 Chrome 103 中执行相同操作的决定。这对原生模块有一些影响。此功能具有性能和安全性优势,但也对原生模块施加了一些新的限制,例如使用指向外部(“堆外”)内存的 ArrayBuffer。请参阅 此博客文章 以获取更多信息。 #34724

重构了 webContents.printToPDF

重构了 webContents.printToPDF 以与 Chromium 的无头实现对齐。有关更多信息,请参阅 #33654

有关这些和未来更改的更多信息,请访问 计划的重大更改 页面。

对 18.x.y 的支持结束

根据项目的 支持策略,Electron 18.x.y 已达到支持结束。鼓励开发人员和应用程序升级到较新版本的 Electron。

E18 (22 年 3 月)E19 (22 年 5 月)E20 (22 年 8 月)E21 (22 年 9 月)E22 (22 年 12 月)
18.x.y19.x.y20.x.y21.x.y22.x.y
17.x.y18.x.y19.x.y20.x.y21.x.y
16.x.y17.x.y18.x.y19.x.y20.x.y

下一步是什么

在短期内,您可以期望团队继续专注于跟上构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。

您可以在 此处找到 Electron 的公共时间表

有关未来更改的更多信息,请访问 计划的重大更改 页面。

Electron 20.0.0

·4 分钟阅读

Electron 20.0.0 已发布!它包括 Chromium 104、V8 10.4 和 Node.js 16.15.0 的升级。阅读下文了解更多详情!


Electron 团队很高兴地宣布 Electron 20.0.0 的发布!您可以通过 npm 使用 npm install electron@latest 安装它,或者从我们的 发布网站 下载它。继续阅读以了解有关此版本的详细信息,并请分享您的任何反馈!

值得注意的更改

新功能

  • 在 Windows 上添加了沉浸式深色模式。 #34549
  • 添加了对面板式行为的支持。窗口可以浮动在全屏应用程序之上。 #34665
  • 更新了 Windows 控制叠加按钮,使其在 Windows 11 上看起来和感觉更原生。 #34888
  • 渲染器现在默认情况下是沙盒化的,除非指定了 nodeIntegration: truesandbox: false#35125
  • 在构建带有 nan 的原生模块时添加了安全保护。 #35160

堆栈更改

重大 & API 更改

以下是 Electron 20 中引入的重大更改。有关这些和未来更改的更多信息,请访问 计划的重大更改 页面。

默认更改:没有 nodeIntegration: true 的渲染器默认情况下是沙盒化的

以前,指定了预加载脚本的渲染器默认情况下是未沙盒化的。这意味着默认情况下,预加载脚本可以访问 Node.js。在 Electron 20 中,此默认值已更改。从 Electron 20 开始,渲染器默认情况下将是沙盒化的,除非指定了 nodeIntegration: truesandbox: false

如果您的预加载脚本不依赖于 Node,则无需执行任何操作。如果您的预加载脚本确实依赖于 Node,请重构它们以从渲染器中删除 Node 用法,或为相关渲染器显式指定 sandbox: false

已修复:nan 原生模块中的自发崩溃

在 Electron 20 中,我们更改了与原生模块相关的两个项目

  1. V8 标头现在默认使用 c++17。此标志已添加到 electron-rebuild。
  2. 我们修复了一个问题,即缺少 include 会导致依赖于 nan 的原生模块中出现自发崩溃。

为了获得最佳稳定性,我们建议在重建原生模块时使用 node-gyp >=8.4.0 和 electron-rebuild >=3.2.9,特别是依赖于 nan 的模块。有关更多信息,请参阅 electron #35160 和 node-gyp #2497

已删除:Linux 上的 .skipTaskbar

在 X11 上,skipTaskbar 向 X11 窗口管理器发送 _NET_WM_STATE_SKIP_TASKBAR 消息。Wayland 没有直接的等效项,并且已知的工作区有不可接受的权衡(例如,GNOME 中的 Window.is_skip_taskbar 需要不安全模式),因此 Electron 无法在 Linux 上支持此功能。

对 17.x.y 的支持结束

根据项目的 支持策略,Electron 17.x.y 已达到支持结束。鼓励开发人员和应用程序升级到较新版本的 Electron。

E18 (22 年 3 月)E19 (22 年 5 月)E20 (22 年 8 月)E21 (22 年 9 月)E22 (22 年 12 月)
18.x.y19.x.y20.x.y21.x.y22.x.y
17.x.y18.x.y19.x.y20.x.y21.x.y
16.x.y17.x.y18.x.y19.x.y20.x.y
15.x.y--------

下一步是什么

在短期内,您可以期望团队继续专注于跟上构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。尽管我们谨慎地不承诺发布日期,但我们的计划是大约每 2 个月发布 Electron 的新主要版本以及这些组件的新版本。

您可以在 此处找到 Electron 的公共时间表

有关未来更改的更多信息,请访问 计划的重大更改 页面。

Electron 和 V8 内存隔离区

·7 分钟阅读

Electron 21 及更高版本将启用 V8 内存隔离区,这对某些原生模块有影响。


更新 (2022/11/01)

要跟踪关于 Electron 21+ 中原生模块使用的持续讨论,请参阅 electron/electron#35801

在 Electron 21 中,我们将启用 Electron 中的 V8 沙盒指针,遵循 Chrome 在 Chrome 103 中执行相同操作的决定。这对原生模块有一些影响。此外,我们之前在 Electron 14 中启用了一项相关技术 指针压缩。我们当时没有过多谈论它,但指针压缩对 V8 堆的最大大小有影响。

这两项技术在启用后,对安全性、性能和内存使用都非常有利。但是,启用它们也有一些缺点。

启用沙盒指针的主要缺点是不再允许指向外部(“堆外”)内存的 ArrayBuffer。这意味着依赖于 V8 中此功能的原生模块将需要重构,以便在 Electron 20 及更高版本中继续工作。

启用指针压缩的主要缺点是 V8 堆的最大大小限制为 4GB。确切的细节有点复杂——例如,ArrayBuffer 与 V8 堆的其余部分分开计数,但有它们自己的限制

Electron 升级工作组 认为指针压缩和 V8 内存隔离区的好处大于缺点。这样做有三个主要原因:

  1. 它使 Electron 更接近 Chromium。Electron 在 V8 配置等复杂的内部细节上与 Chromium 的差异越小,我们意外引入错误或安全漏洞的可能性就越小。Chromium 的安全团队非常强大,我们希望确保我们正在利用他们的工作。此外,如果错误仅影响 Chromium 中未使用的配置,则修复它不太可能是 Chromium 团队的优先事项。
  2. 它的性能更好。 指针压缩将 V8 堆大小减少高达 40%,并将 CPU 和 GC 性能提高 5%–10%。对于绝大多数不会遇到 4GB 堆大小限制且不使用需要外部缓冲区的原生模块的 Electron 应用程序,这些都是显着的性能提升。
  3. 它更安全。一些 Electron 应用程序运行不受信任的 JavaScript(希望遵循我们的 安全建议!),对于这些应用程序,启用 V8 内存隔离区可以保护它们免受大量恶意 V8 漏洞的侵害。

最后,对于确实需要更大堆大小的应用程序,有一些解决方法。例如,可以在您的应用程序中包含一个带有 Node.js 的副本,该副本是在禁用指针压缩的情况下构建的,并将内存密集型工作移动到子进程。虽然有点复杂,但如果您决定为您的特定用例选择不同的权衡,也可以构建一个禁用指针压缩的 Electron 自定义版本。最后,在不久的将来,wasm64 将允许使用 WebAssembly 构建的应用程序在 Web 和 Electron 上使用超过 4GB 的内存。


常见问题解答

我如何知道我的应用程序是否受到此更改的影响?

尝试使用 ArrayBuffer 包装外部内存将在 Electron 20+ 中运行时崩溃。

如果您在应用程序中不使用任何原生 Node 模块,那么您是安全的——无法从纯 JS 触发此崩溃。此更改仅影响在 V8 堆之外分配内存(例如,使用 mallocnew)然后使用 ArrayBuffer 包装外部内存的原生 Node 模块。这是一个相当罕见的用例,但某些模块确实使用了这种技术,并且此类模块将需要重构,以便与 Electron 20+ 兼容。

我如何衡量我的应用程序正在使用多少 V8 堆内存,以了解我是否接近 4GB 限制?

在渲染器进程中,您可以使用 performance.memory.usedJSHeapSize,它将返回 V8 堆使用量(以字节为单位)。在主进程中,您可以使用 process.memoryUsage().heapUsed,这是相当的。

什么是 V8 内存隔离区?

一些文档将其称为“V8 沙箱”,但该术语很容易与 Chromium 中发生的其他类型的沙箱 混淆,因此我将坚持使用术语“内存隔离区”。

有一种相当常见的 V8 漏洞利用方式,如下所示:

  1. 在 V8 的 JIT 引擎中找到一个错误。JIT 引擎分析代码,以便能够省略缓慢的运行时类型检查并生成快速的机器代码。有时逻辑错误意味着它会错误地进行此分析,并省略了实际需要的类型检查——例如,它认为 x 是一个字符串,但实际上它是一个对象。
  2. 滥用此混淆来覆盖 V8 堆中的某些内存位,例如,指向 ArrayBuffer 开头的指针。
  3. 现在您有一个指向您喜欢的任何位置的 ArrayBuffer,因此您可以读取和写入进程中的任何内存,甚至是 V8 通常无法访问的内存。

V8 内存隔离区是一种旨在从根本上防止此类攻击的技术。实现此目的的方法是不在 V8 堆中存储任何指针。相反,V8 堆中对其他内存的所有引用都存储为与某个保留区域起点的偏移量。然后,即使攻击者设法破坏了 ArrayBuffer 的基地址,例如通过利用 V8 中的类型混淆错误,他们能做的最坏的事情也是读取和写入隔离区内的内存,而他们可能已经可以这样做。关于 V8 内存隔离区的工作原理还有很多可读的内容,因此我在此不再赘述——最好的阅读起点可能是 Chromium 团队的 高级设计文档

我想重构 Node 原生模块以支持 Electron 21+。我该怎么做?

有两种方法可以重构原生模块以使其与 V8 内存隔离区兼容。第一种是在将外部创建的缓冲区传递给 JavaScript 之前,将其复制到 V8 内存隔离区中。这通常是一个简单的重构,但当缓冲区很大时,它可能会很慢。另一种方法是使用 V8 的内存分配器来分配您打算最终传递给 JavaScript 的内存。这有点复杂,但可以让您避免复制,这意味着大型缓冲区具有更好的性能。

为了使这一点更具体,这是一个使用外部数组缓冲区的 N-API 模块示例

// Create some externally-allocated buffer.
// |create_external_resource| allocates memory via malloc().
size_t length = 0;
void* data = create_external_resource(&length);
// Wrap it in a Buffer--will fail if the memory cage is enabled!
napi_value result;
napi_create_external_buffer(
env, length, data,
finalize_external_resource, NULL, &result);

当启用内存隔离区时,这将崩溃,因为数据是在隔离区之外分配的。重构为改为将数据复制到隔离区,我们得到

size_t length = 0;
void* data = create_external_resource(&length);
// Create a new Buffer by copying the data into V8-allocated memory
napi_value result;
void* copied_data = NULL;
napi_create_buffer_copy(env, length, data, &copied_data, &result);
// If you need to access the new copy, |copied_data| is a pointer
// to it!

这会将数据复制到 V8 内存隔离区内新分配的内存区域中。或者,N-API 还可以提供指向新复制数据的指针,以防您需要在事后修改或引用它。

重构为使用 V8 的内存分配器有点复杂,因为它需要修改 create_external_resource 函数以使用 V8 分配的内存,而不是使用 malloc。这可能是或多或少可行的,具体取决于您是否控制 create_external_resource 的定义。这个想法是首先使用 V8 创建缓冲区,例如使用 napi_create_buffer,然后将资源初始化到 V8 已分配的内存中。重要的是为 资源的生命周期 保留对 Buffer 对象的 napi_ref,否则 V8 可能会垃圾回收 Buffer 并可能导致释放后使用错误。

Electron 19.0.0

·3 分钟阅读

Electron 19.0.0 已发布!它包括 Chromium 102、V8 10.2 和 Node.js 16.14.2 的升级。阅读下文了解更多详情!


Electron 团队很高兴地宣布 Electron 19.0.0 的发布!您可以通过 npm 使用 npm install electron@latest 安装它,或者从我们的 发布网站 下载它。继续阅读以了解有关此版本的详细信息,并请分享您的任何反馈!

值得注意的更改

Electron 发布节奏变更

该项目正在恢复其早期支持最新三个主要版本的策略。 请参阅我们的版本控制文档,了解有关 Electron 版本控制和支持的更多详细信息。这暂时是四个主要版本,以帮助用户适应 Electron 15 中开始的新发布节奏。您可以阅读 此处的完整详细信息

堆栈更改

重大 & API 更改

以下是 Electron 19 中引入的重大更改。有关这些和未来更改的更多信息,请访问 计划的重大更改 页面。

在 Linux 上不受支持:.skipTaskbar

BrowserWindow 构造函数选项 skipTaskbar 在 Linux 上不再受支持。在 #33226 中更改

已删除 WebPreferences.preloadURL

半文档化的 preloadURL 属性已从 WebPreferences 中删除。 #33228。应改用 WebPreferences.preload

15.x.y 和 16.x.y 版本停止支持

Electron 14.x.y 和 15.x.y 版本均已达到停止支持日期。 这将 Electron 恢复到其支持最新的三个主要版本的现有策略。 建议开发者和应用程序升级到较新版本的 Electron。

E15 (21 年 9 月)E16 (21 年 11 月)E17 (22 年 2 月)E18 (22 年 3 月)E19 (22 年 5 月)
15.x.y16.x.y17.x.y18.x.y19.x.y
14.x.y15.x.y16.x.y17.x.y18.x.y
13.x.y14.x.y15.x.y16.x.y17.x.y
12.x.y13.x.y14.x.y15.x.y--

下一步是什么

在短期内,您可以期望团队继续专注于跟上构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。尽管我们谨慎地不承诺发布日期,但我们的计划是大约每 2 个月发布 Electron 的新主要版本以及这些组件的新版本。

您可以在 此处找到 Electron 的公共时间表

有关未来更改的更多信息,请访问 计划的重大更改 页面。

S3 存储桶迁移

·2 分钟阅读

Electron 正在更改其主要 S3 存储桶,您可能需要更新您的构建脚本


正在发生什么?

大量的 Electron 构建工件被上传到一个名为 gh-contractor-zcbenz 的 S3 存储桶。 作为 2020 年开始的持续基础设施/所有权迁移的一部分,我们将把所有使用 gh-contractor-zcbenz 的内容从其旧的 S3 位置更改为托管在 https://artifacts.electronjs.org 的新存储系统。 我们大多数资产使用的路径前缀也略有变化。 示例如下

之前: https://gh-contractor-zcbenz.s3.amazonaws.com/atom-shell/dist/v17.0.0/node.lib 之后: https://artifacts.electronjs.org/headers/dist/v17.0.0/node.lib

这里重要的是 主机名 发生了变化,/atom-shell 前缀 也发生了变化。 另一个示例,这次是针对调试符号

之前: https://gh-contractor-zcbenz.s3.amazonaws.com/atom-shell/symbols/path/to/symbol.pdb 之后: https://artifacts.electronjs.org/symbols/path/to/symbol.pdb

同样,主机名发生了变化,/atom-shell 前缀也发生了变化。

这可能会对您产生什么影响?

任何使用标准构建工具(如 electron-rebuildelectron-packager@electron/get)的人都不需要做任何事情。 这应该是大多数人。

对于任何直接引用 S3 存储桶的人,您必须更新您的引用以指向新的主机名并更新路径。

现有数据会怎样?

gh-contractor-zcbenz 存储桶上的大多数数据已被克隆到新的存储系统中。 这意味着所有调试符号和所有标头都已被复制。 如果您依赖于该存储桶中某些未被复制的数据,请在 electron/electron 中提出问题并告知我们。

当前的 gh-contractor-zcbenz S3 存储桶不会被主动删除。 但是,我们无法保证该存储桶将保留多久。 我们强烈建议尽快更新以定位到新的存储桶。

Electron 18.0.0

·3 分钟阅读

Electron 18.0.0 已发布! 它包括 Chromium 100、V8 10.0 和 Node.js 16.13.2 的升级。 阅读下文了解更多详情!


Electron 团队很高兴地宣布 Electron 18.0.0 的发布! 您可以使用 npm 通过 npm install electron@latest 安装它,或从我们的发布网站下载它。 继续阅读以了解有关此版本的详细信息,并请分享您的任何反馈!

值得注意的更改

Electron 发布节奏变更

从 Electron 15 开始,Electron 将每 8 周发布一个新的主要稳定版本。 您可以在此处阅读完整详情

此外,Electron 已将支持的版本从最新的三个版本更改为最新的四个版本,直到 2022 年 5 月。 请参阅我们的版本控制文档,了解有关 Electron 中版本控制的更多详细信息。 2022 年 5 月之后,我们将恢复支持最新的三个版本。

堆栈更改

重点功能

  • 添加了 ses.setCodeCachePath() API,用于设置代码缓存目录。 #33286
  • 移除了旧的基于 BrowserWindowProxywindow.open 实现。 这也移除了 webPreferences 中的 nativeWindowOpen 选项。 #29405
  • WebContents 添加了“focus”和“blur”事件。 #25873
  • 在 macOS 上添加了替换菜单角色:showSubstitutionstoggleSmartQuotestoggleSmartDashestoggleTextReplacement#32024
  • app.requestSingleInstanceLock() 流程添加了 first-instance-ack 事件,允许用户将数据从第一个实例无缝传输到第二个实例。 #31460
  • setBackgroundColor 中添加了对更多颜色格式的支持。 #33364

请参阅 18.0.0 发行说明,了解新功能和更改的完整列表。

重大 & API 更改

以下是 Electron 18 中引入的重大更改。 有关这些更改和未来更改的更多信息,请访问计划的重大更改页面。

已移除:nativeWindowOpen

在 Electron 15 之前,默认情况下 window.open 被 shimmed 以使用 BrowserWindowProxy。 这意味着 window.open('about:blank') 无法同步打开可脚本化的子窗口,以及其他不兼容性。 自 Electron 15 以来,默认情况下已启用 nativeWindowOpen

有关更多详细信息,请参阅 Electron 中 window.open 的文档。 在 #29405 中移除

14.x.y 版本停止支持

根据项目的支持策略,Electron 14.x.y 版本已达到停止支持日期。 建议开发者和应用程序升级到较新版本的 Electron。

从 Electron 15 开始,我们将支持的版本从最新的三个版本更改为最新的四个版本,直到 2022 年 5 月的 Electron 19。 在 Electron 19 之后,我们将恢复支持最新的三个版本。 此版本支持更改是我们新的节奏变化的一部分。 请参阅我们的博客文章,了解完整详情

E15 (21 年 9 月)E16 (21 年 11 月)E17 (22 年 2 月)E18 (22 年 3 月)E19 (22 年 5 月)
15.x.y16.x.y17.x.y18.x.y19.x.y
14.x.y15.x.y16.x.y17.x.y18.x.y
13.x.y14.x.y15.x.y16.x.y17.x.y
12.x.y13.x.y14.x.y15.x.y--

下一步是什么

在短期内,您可以期望团队继续专注于跟上构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。尽管我们谨慎地不承诺发布日期,但我们的计划是大约每 2 个月发布 Electron 的新主要版本以及这些组件的新版本。

您可以在 此处找到 Electron 的公共时间表

有关未来更改的更多信息,请访问 计划的重大更改 页面。

Google 编程之夏 2022

·2 分钟阅读

Electron 团队很高兴地宣布,今年我们将首次参加 Google Summer of Code!


什么是 Google Summer of Code?

Google Summer of Code (GSoC) 是一年一度的指导计划,将开源软件项目与潜在的贡献者联系起来。 以前仅对学生开放,现在任何 18 岁及以上的人都可以注册 GSoC。

有关更多信息,请查看Summer of Code 首页

如何注册?

您是否有兴趣与 Electron 合作? 如果您是新的或初级的开源贡献者,我们欢迎您申请!

为了被选为 Google Summer of Code 的 Electron 贡献者,您需要提交一份申请。 申请将于 2022 年 4 月 4 日开放,并于 2022 年 4 月 19 日关闭。 您可以在此处关注 Google: Summer of Code 申请指南的更新

想要申请? 首先,查看我们准备的五个项目想法草案。 所有列出的想法目前都开放提案。 我们也欢迎接受不在拟议项目列表中的新想法。

您的申请应包括

  • 您的提案,这是一份书面文件,详细描述了您计划在整个夏季实现的目标。
  • 您作为开发者的背景。 如果您有简历,请附上一份副本,否则请告诉我们您过去的经验,重点是相关的技术经验。

此处提供了关于作为 Electron 应用程序的一部分提交内容的详细指南。

您还可以阅读官方 GSoC 学生/贡献者指南,以获取有关准备提案的重要提示。

如果您想讨论项目提案或有疑问,请加入我们的 #gsoc-general Discord 频道

参考资料

Electron 17.0.0

·3 分钟阅读

Electron 17.0.0 已发布! 它包括 Chromium 98、V8 9.8 和 Node.js 16.13.0 的升级。 阅读下文了解更多详情!


Electron 团队很高兴地宣布 Electron 17.0.0 的发布! 您可以使用 npm 通过 npm install electron@latest 安装它,或从我们的发布网站下载它。 继续阅读以了解有关此版本的详细信息,并请分享您的任何反馈!

值得注意的更改

Electron 发布节奏变更

从 Electron 15 开始,Electron 将每 8 周发布一个新的主要稳定版本。 您可以在此处阅读完整详情

此外,Electron 已将支持的版本从最新的三个版本更改为最新的四个版本,直到 2022 年 5 月。 请参阅我们的版本控制文档,了解有关 Electron 中版本控制的更多详细信息。 2022 年 5 月之后,我们将恢复支持最新的三个版本。

堆栈更改

重点功能

  • 添加了 webContents.getMediaSourceId(),可以与 getUserMedia 一起使用以获取 WebContents 的流。 #31204
  • 弃用了 webContents.getPrinters() 并引入了 webContents.getPrintersAsync()#31023
  • desktopCapturer.getSources 现在仅在主进程中可用。 #30720

请参阅 17.0.0 发行说明,了解新功能和更改的完整列表。

重大更改

以下是 Electron 17 中引入的重大更改。 有关这些更改和未来更改的更多信息,请访问计划的重大更改页面。

渲染器中的 desktopCapturer.getSources

desktopCapturer.getSources API 现在仅在主进程中可用。 此更改是为了提高 Electron 应用程序的默认安全性。

API 更改

Electron 17 中没有 API 更改。

已移除/已弃用更改

  • 已移除在渲染器中使用 desktopCapturer.getSources API。 有关如何在您的应用程序中替换此 API 的详细信息,请参阅此处

13.x.y 版本停止支持

根据项目的支持策略,Electron 13.x.y 版本已达到停止支持日期。 建议开发者和应用程序升级到较新版本的 Electron。

从 Electron 15 开始,我们将支持的版本从最新的三个版本更改为最新的四个版本,直到 2022 年 5 月的 Electron 19。 在 Electron 19 之后,我们将恢复支持最新的三个版本。 此版本支持更改是我们新的节奏变化的一部分。 请参阅我们的博客文章,了解完整详情

E15 (21 年 9 月)E16 (21 年 11 月)E17 (22 年 2 月)E18 (22 年 3 月)E19 (22 年 5 月)
15.x.y16.x.y17.x.y18.x.y19.x.y
14.x.y15.x.y16.x.y17.x.y18.x.y
13.x.y14.x.y15.x.y16.x.y17.x.y
12.x.y13.x.y14.x.y15.x.y--

下一步是什么

在短期内,您可以期望团队继续专注于跟上构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。尽管我们谨慎地不承诺发布日期,但我们的计划是大约每 2 个月发布 Electron 的新主要版本以及这些组件的新版本。

您可以在 此处找到 Electron 的公共时间表

有关未来更改的更多信息,请访问 计划的重大更改 页面。

Spectron 弃用通知

·2 分钟阅读

Spectron 将于 2022 年 2 月 1 日弃用。


从 2022 年 2 月开始,Spectron 将被 Electron 团队正式弃用

为什么要弃用 Spectron?

虽然 Spectron 为每个新版本的 Electron 持续发布新版本,但该项目在一年多的时间里几乎没有维护和改进,目前没有全职维护人员。 随着远程模块从 Electron 核心移出并移至 Electron 14 中的外部模块,Spectron 将需要进行重大重写才能继续可靠地工作。

在审查了 Spectron 持续维护的几个可用选项后,Electron 团队已决定在 2022 年弃用 Spectron。

弃用时间表

以下是我们计划的弃用时间表

  • 2021 年 11 月 - 2022 年 1 月:Electron 团队将继续接受来自社区的拉取请求。
  • 2022 年 1 月:将发布关于 Spectron 弃用的最终版本公告。
  • 2022 年 2 月 1 日:Spectron 的存储库将被标记为“已存档”。 将不再接受拉取请求。

在 2022 年 2 月 1 日之后,Electron 将继续无限期地保留 Spectron 存储库,以便其他人可以随意 fork 或使用现有代码用于他们的项目。 我们希望这将有助于为可能仍依赖 Spectron 的任何项目提供更长的过渡期。

Spectron 的替代方案

如果您当前在您的项目中使用 Spectron,并且想要迁移到替代的测试解决方案,您可以阅读我们的此处提供的自动化测试指南

我们目前有 Spectron 的其他几个推荐的替代方案,包括 Playwright 和 WebDriverIO。 每个选项的官方教程都可以在我们的自动化测试文档中找到。

下一步是什么

Electron 团队感谢您使用 Spectron 和 Electron。 我们理解你们中的许多人依赖 Spectron 来测试您的应用程序,我们希望尽可能为您简化此过渡。 感谢您选择 Electron!

Electron 16.0.0

·4 分钟阅读

Electron 16.0.0 已发布! 它包括 Chromium 96、V8 9.6 和 Node.js 16.9.1 的升级。 阅读下文了解更多详情!


Electron 团队很高兴地宣布 Electron 16.0.0 的发布! 您可以使用 npm 通过 npm install electron@latest 安装它,或从我们的发布网站下载它。 继续阅读以了解有关此版本的详细信息,并请分享您的任何反馈!

值得注意的更改

Electron 发布节奏变更

从 Electron 15 开始,Electron 将每 8 周发布一个新的主要稳定版本。 您可以在此处阅读完整详情

此外,Electron 已将支持的版本从最新的三个版本更改为最新的四个版本,直到 2022 年 5 月。 请参阅我们的版本控制文档,了解有关 Electron 中版本控制的更多详细信息。 2022 年 5 月之后,我们将恢复支持最新的三个版本。

堆栈更改

重点功能

  • 现在支持 WebHID API。 #30213
  • 将数据参数添加到 app.requestSingleInstanceLock 以在实例之间共享数据。 #30891
  • 将 securityOrigin 传递给媒体权限请求处理程序。 #31357
  • 添加 commandLine.removeSwitch#30933

请参阅 16.0.0 发行说明,了解新功能和更改的完整列表。

重大更改

以下是 Electron 16 中引入的重大更改。 有关这些更改和未来更改的更多信息,请访问计划的重大更改页面。

构建原生模块

如果您的项目使用 node-gyp 构建原生模块,您可能需要使用 --force-process-config 调用它,具体取决于您的项目设置和您的 Electron 版本。 有关此更改的更多信息,请访问 #2497

行为已更改:crashReporter 实现在 Linux 上切换到 Crashpad

Linux 上 crashReporter API 的底层实现已从 Breakpad 更改为 Crashpad,使其与 Windows 和 Mac 保持一致。 因此,现在会自动监控子进程,并且不再需要在 Node 子进程中调用 process.crashReporter.start(不建议这样做,因为它会启动 Crashpad 报告器的第二个实例)。

Linux 上注释的报告方式也发生了一些细微的变化,包括长值将不再在附加了 __1__2 等的注释之间拆分,而是将在(新的、更长的)注释值限制处截断。

API 更改

Electron 16 中没有 API 更改。

已移除/已弃用更改

  • 已弃用在渲染器中使用 desktopCapturer.getSources API,并将被移除。 此更改提高了 Electron 应用程序的默认安全性。 有关如何在您的应用程序中替换此 API 的详细信息,请参阅此处

12.x.y 版本停止支持

根据项目的支持策略,Electron 12.x.y 版本已达到停止支持日期。 建议开发者和应用程序升级到较新版本的 Electron。

从 Electron 15 开始,我们将支持的版本从最新的三个版本更改为最新的四个版本,直到 2022 年 5 月的 Electron 19。 在 Electron 19 之后,我们将恢复支持最新的三个版本。 此版本支持更改是我们新的节奏变化的一部分。 请参阅我们的博客文章,了解完整详情

E15 (21 年 9 月)E16 (21 年 11 月)E17 (22 年 2 月)E18 (22 年 3 月)E19 (22 年 5 月)
15.x.y16.x.y17.x.y18.x.y19.x.y
14.x.y15.x.y16.x.y17.x.y18.x.y
13.x.y14.x.y15.x.y16.x.y17.x.y
12.x.y13.x.y14.x.y15.x.y--

下一步是什么

在短期内,您可以期望团队继续专注于跟上构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。尽管我们谨慎地不承诺发布日期,但我们的计划是大约每 2 个月发布 Electron 的新主要版本以及这些组件的新版本。

您可以在 此处找到 Electron 的公共时间表

有关未来更改的更多信息,请访问 计划的重大更改 页面。