跳到主要内容

Electron 24.0.0

·4 分钟阅读

Electron 24.0.0 已发布!它包括对 Chromium 112.0.5615.49、V8 11.2 和 Node.js 18.14.0 的升级。请阅读以下内容了解更多详情!


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

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

主要变更

堆栈变更

重大变更

API 已更改:nativeImage.createThumbnailFromPath(path, size)

maxSize 参数已更改为 size,以反映传入的大小将是创建的缩略图的大小。以前,如果图像小于 maxSize,Windows 将不会放大图像,而 macOS 将始终将大小设置为 maxSize。现在,所有平台上的行为都相同。

// a 128x128 image.
const imagePath = path.join('path', 'to', 'capybara.png');

// Scaling up a smaller image.
const upSize = { width: 256, height: 256 };
nativeImage.createThumbnailFromPath(imagePath, upSize).then((result) => {
console.log(result.getSize()); // { width: 256, height: 256 }
});

// Scaling down a larger image.
const downSize = { width: 64, height: 64 };
nativeImage.createThumbnailFromPath(imagePath, downSize).then((result) => {
console.log(result.getSize()); // { width: 64, height: 64 }
});

新功能

  • 添加了使用 cookies.get() 筛选 HttpOnly Cookie 的功能。#37365
  • logUsage 添加到 shell.openExternal() 选项,该选项允许将 SEE_MASK_FLAG_LOG_USAGE 标志传递给 Windows 上的 ShellExecuteExSEE_MASK_FLAG_LOG_USAGE 标志指示用户启动的启动,该启动可以跟踪常用程序和其他行为。#37291
  • types 添加到 webRequest 过滤器,从而添加了筛选您正在侦听的请求的功能。#37427
  • webContents 添加了一个新的 devtools-open-url 事件,以允许开发人员使用它们打开新窗口。#36774
  • webContents.print() 添加了多个标准页面大小选项。#37265
  • enableLocalEcho 标志添加到会话处理程序 ses.setDisplayMediaRequestHandler() 回调中,以便在 audioWebFrameMain 时,允许将远程音频输入回显到本地输出流中。#37528
  • 允许将特定于应用程序的用户名传递给 inAppPurchase.purchaseProduct()#35902
  • 公开了 window.invalidateShadow(),以清除 macOS 上的残留视觉伪影。#32452
  • 现在默认在 electron node 头文件配置中启用全程序优化,允许编译器使用来自程序中所有模块的信息(而不是每个模块(编译单元)的基础上)执行优化。#36937
  • SystemPreferences::CanPromptTouchID (macOS) 现在支持 Apple Watch。#36935

对 21.x.y 的支持结束

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

正如告别 Windows 7/8/8.1中所述,Electron 22 (Chromium 108) 计划的生命周期结束日期将从 2023 年 5 月 30 日延长至 2023 年 10 月 10 日。Electron 团队将继续将此计划中的任何安全修复向后移植到 Electron 22,直到 2023 年 10 月 10 日。

E24 (23 年 4 月)E25 (23 年 5 月)E26 (23 年 8 月)
24.x.y25.x.y26.x.y
23.x.y24.x.y25.x.y
22.x.y23.x.y24.x.y
--22.x.y22.x.y

接下来是什么

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

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

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

Electron 十周年 🎉

·10 分钟阅读

electron/electron仓库的第一次提交是在 2013 年 3 月 13 日1

Initial commit on electron/electron by @aroben

10 年和 1192 位独特贡献者提交的 27,147 次提交之后,Electron 已成为当今最流行的桌面应用程序构建框架之一。这个里程碑是庆祝和反思我们迄今为止的旅程,并分享我们一路走来所学到的知识的绝佳机会。

如果没有每一位投入时间和精力为该项目做出贡献的人,我们今天就不会在这里。尽管源代码提交始终是最可见的贡献,但我们还必须承认那些报告错误、维护用户模块、提供文档和翻译以及参与网络空间中 Electron 社区的人们所付出的努力。作为维护者,每一项贡献对我们来说都非常宝贵。

在我们继续这篇博文的其余部分之前:谢谢。❤️

我们是如何走到这里的?

Atom Shell 是作为 GitHub 的 Atom 编辑器的支柱而构建的,该编辑器于 2014 年 4 月公开发布测试版。它从头开始构建,作为当时可用的基于 Web 的桌面框架(node-webkit 和 Chromium Embedded Framework)的替代方案。它有一个杀手级功能:嵌入 Node.js 和 Chromium,为 Web 技术提供强大的桌面运行时。

在一年之内,Atom Shell 的功能和受欢迎程度开始大幅增长。大型公司、初创公司和个人开发人员都开始使用它构建应用程序(一些早期的采用者包括 SlackGitKrakenWebTorrent),该项目被恰如其分地更名为 Electron

从那时起,Electron 一直在快速发展,从未停止。以下是我们每周下载量的随时间变化图,由 npmtrends.com 提供

Electron weekly downloads graph over time

Electron v1 于 2016 年发布,承诺提高 API 稳定性并提供更好的文档和工具。Electron v2 于 2018 年发布,并引入了语义版本控制,使 Electron 开发人员更容易跟踪发布周期。

到 Electron v6 时,我们转为与 Chromium 匹配的常规 12 周主要版本发布节奏。此决定改变了该项目的心态,将“拥有最新的 Chromium 版本”从锦上添花变为优先事项。这减少了升级之间的技术债务,使我们更容易保持 Electron 的更新和安全。

从那时起,我们一直像一台运转良好的机器一样,在每个 Chromium 稳定版发布的同一天发布一个新的 Electron 版本。当 Chromium 在 2021 年将其发布时间表加速到 4 周时,我们能够耸耸肩,并将发布节奏相应地提高到 8 周。

我们现在使用的是 Electron v23(并且还在继续),并且仍然致力于为构建跨平台桌面应用程序构建最佳运行时。即使近年来 JavaScript 开发工具蓬勃发展,Electron 仍然是桌面应用程序框架领域中稳定且久经考验的坚定支持者。如今,Electron 应用程序无处不在:您可以使用 Visual Studio Code 进行编程、使用 Figma 进行设计、使用 Slack 进行通信以及使用 Notion 记笔记(以及许多其他用例)。我们对这一成就感到无比自豪,并感谢每一位使其成为可能的人。

我们一路学到了什么?

达到十年里程碑的道路漫长而曲折。以下是一些帮助我们运营一个可持续的大型开源项目的关键要素。

使用治理模型扩展分布式决策

我们必须克服的一个挑战是在 Electron 最初流行后,如何处理该项目的长期方向。我们如何处理由分布在不同公司、国家和时区的几十名工程师组成的团队?

在早期,Electron 的维护者小组依靠非正式协调,对于较小的项目来说,这种协调快速且轻量,但无法扩展到更广泛的协作。2019 年,我们转向治理模型,其中不同的工作组具有正式的责任领域。这对于简化流程和将项目所有权的一部分分配给特定的维护人员至关重要。现在,每个工作组 (WG) 负责什么?

  • 发布 Electron 版本 (发布工作组)
  • 升级 Chromium 和 Node.js (升级工作组)
  • 监督公共 API 设计 (API 工作组)
  • 保持 Electron 的安全 (安全工作组)
  • 运行网站、文档和工具 (生态系统工作组)
  • 社区和企业宣传 (宣传工作组)
  • 社区审核 (社区与安全工作组)
  • 维护我们的构建基础设施、维护工具和云服务 (基础设施工作组)

大约在切换到治理模型的同时,我们也将 Electron 的所有权从 GitHub 转移到 OpenJS 基金会。尽管最初的核心团队今天仍在 Microsoft 工作,但他们只是构成 Electron 治理的更庞大的合作者群体的一部分。2

虽然此模型并非完美,但它在在全球疫情和持续的宏观经济逆风中很好地适应了我们。展望未来,我们计划修改治理章程,以指导我们度过 Electron 的第二个十年。

信息

如果您想了解更多信息,请查看 electron/governance 存储库!

社区

开源的社区部分很难,尤其是当您的宣传团队是由十几位穿着印有“社区经理”字样的风衣的工程师组成时。也就是说,作为一个大型开源项目意味着我们有很多用户,利用他们的能量为 Electron 构建用户生态系统是维持项目健康的关键部分。

为了发展我们的社区影响力,我们一直在做什么?

构建虚拟社区

  • 2020 年,我们启动了我们的社区 Discord 服务器。我们之前在 Atom 的论坛中有一个版块,但决定拥有一个更非正式的消息传递平台,为维护人员和 Electron 开发人员之间的讨论以及一般调试帮助提供空间。
  • 2021 年,在 @BlackHole1 的帮助下,我们建立了Electron China 用户组。该小组在 Electron 在中国蓬勃发展的科技领域的用户增长中发挥了重要作用,为他们提供了一个合作交流想法和在我们的英语空间之外讨论 Electron 的空间。我们还要感谢 cnpm 为支持 Electron 的 npm 中文镜像中的每日构建版本所做的工作。

参与高知名度的开源项目

  • 自 2019 年以来,我们每年都在庆祝 Hacktoberfest。Hacktoberfest 是 DigitalOcean 每年组织的开源庆祝活动,我们每年都会收到数十名热情的贡献者,他们希望在开源软件上留下自己的印记。
  • 2020 年,我们参与了 Google Season of Docs 的初始迭代,我们在其中与 @bandantonio 合作,重新设计了 Electron 的新用户教程流程。
  • 2022 年,我们首次指导了一位 Google Summer of Code 学生。@aryanshridhar 做了一些很棒的工作,重构了 Electron Fiddle 的核心版本加载逻辑,并将其捆绑器迁移到 webpack

自动化所有事情!

今天,Electron 治理机构拥有大约 30 名活跃的维护人员。我们中只有不到一半是全职贡献者,这意味着有很多工作要做。我们保持一切顺利运行的诀窍是什么?我们的座右铭是计算机很便宜,而人类时间很昂贵。以典型的工程师方式,我们开发了一套自动化支持工具,以使我们的生活更轻松。

不是 Goma

Electron 的核心代码库是一个庞大的 C++ 代码,构建时间一直是限制我们发布错误修复和新功能速度的因素。2020 年,我们部署了 Not Goma,这是谷歌 Goma 分布式编译器服务的定制 Electron 特定后端。Not Goma 处理来自授权用户机器的编译请求,并将该过程分布在后端的数百个内核中。它还会缓存编译结果,以便其他编译相同文件的人只需下载预编译结果。

自从推出 Not Goma 以来,维护人员的编译时间已从数小时缩短到数分钟。稳定的互联网连接成为贡献者编译 Electron 的最低要求!

信息

如果您是开源贡献者,您还可以尝试 Not Goma 的只读缓存,该缓存默认情况下可通过 Electron Build Tools 获得。

持续因子身份验证

持续因子身份验证 (CFA) 是围绕 npm 的双因素身份验证 (2FA) 系统的一层自动化,我们将其与 semantic-release 结合使用,以管理我们各种 @electron/ npm 包的安全和自动化发布。

虽然 semantic-release 已经自动化了 npm 包的发布过程,但它需要关闭双因素身份验证或传入一个秘密令牌来绕过此限制。

我们构建 CFA 的目的是为任意 CI 作业提供 npm 2FA 的基于时间的一次性密码 (TOTP),从而使我们能够在保持双因素身份验证的额外安全性的同时,利用 semantic-release 的自动化功能。

我们将 CFA 与 Slack 集成前端一起使用,允许维护人员从他们拥有 Slack 的任何设备验证软件包发布,只要他们手头有 TOTP 生成器即可。

信息

如果您想在自己的项目中试用 CFA,请查看 GitHub 存储库文档! 如果您使用 CircleCI 作为您的 CI 提供商,我们还有一个方便的 orb,可以快速搭建具有 CFA 的项目。

Sheriff

Sheriff 是我们编写的一个开源工具,用于自动化 GitHub、Slack 和 Google Workspace 的权限管理。

Sheriff 的主要价值主张是权限管理应该是一个透明的过程。它使用一个 YAML 配置文件,用于指定所有上述列出服务中的权限。 使用 Sheriff,获得存储库的协作者身份或创建新的邮件列表就像获得 PR 的批准和合并一样简单。

Sheriff 还有一个审计日志,会发布到 Slack,在 Electron 组织中的任何地方发生可疑活动时警告管理员。

……以及我们所有的 GitHub 机器人

GitHub 是一个具有丰富 API 可扩展性和名为 Probot 的第一方机器人应用程序框架的平台。 为了帮助我们专注于工作中更具创造性的部分,我们构建了一套较小的机器人,以帮助我们完成繁琐的工作。 以下是一些示例

  • Sudowoodo 从头到尾自动化 Electron 的发布过程,从启动构建到将发布资产上传到 GitHub 和 npm。
  • Trop 通过尝试基于 GitHub PR 标签将补丁选择性地移植到之前的发布分支,来自动化 Electron 的反向移植过程。
  • Roller 自动化 Electron 的 Chromium 和 Node.js 依赖项的滚动升级。
  • Cation 是我们用于 electron/electron PR 的状态检查机器人。

总而言之,我们这个小小的机器人家族极大地提高了开发人员的生产力!

下一步是什么?

当我们进入作为项目的第二个十年时,您可能会问:Electron 的下一步是什么?

我们将与 Chromium 的发布节奏保持同步,每 8 周发布 Electron 的新主要版本,使该框架与 Web 平台和 Node.js 的最新和最强大的功能保持同步,同时保持企业级应用程序的稳定性和安全性。

我们通常在即将推出的计划具体化时宣布相关新闻。 如果您想及时了解未来的版本、功能和常规项目更新,您可以阅读我们的博客并关注我们的社交媒体资料(TwitterMastodon)!

脚注

  1. 这实际上是 electron-archive/brightray 项目的第一个提交,该项目于 2017 年被并入 Electron 并合并了其 git 历史。 但谁在乎呢? 今天是我们的生日,所以我们来制定规则!

  2. 与普遍的看法相反,Electron 不再由 GitHub 或 Microsoft 拥有,现在是 OpenJS 基金会的一部分。

Electron 23.0.0

·3 分钟阅读

Electron 23.0.0 已发布! 它包括对 Chromium 110、V8 11.0 和 Node.js 18.12.1 的升级。 此外,已取消对 Windows 7/8/8.1 的支持。 阅读下文了解更多详细信息!


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

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

主要变更

堆栈变更

新功能

  • Display 对象添加了 label 属性。 #36933
  • 添加了一个 app.getPreferredSystemLanguages() API,以返回用户的系统语言。 #36035
  • 添加了对 WebUSB API 的支持。 #36289
  • 添加了对 SerialPort.forget() 的支持,以及在给定来源被撤销时在 Session 对象上发出的新事件 serial-port-revoked#35310
  • 添加了新的 win.setHiddenInMissionControl API,以允许开发人员选择退出 macOS 上的任务控制。 #36092

放弃对 Windows 7/8/8.1 的支持

Electron 23 不再支持 Windows 7/8/8.1。 Electron 遵循计划的 Chromium 弃用策略,该策略将在 Chromium 109 中弃用 Windows 7/8/8.1 以及 Windows Server 2012 和 2012 R2 的支持(在此处阅读更多信息)

重大 API 更改

以下是 Electron 23 中引入的重大更改。 您可以在计划的重大更改页面上阅读有关这些更改和未来更改的更多信息。

已删除:BrowserWindow scroll-touch-* 事件

已删除 BrowserWindow 上已弃用的 scroll-touch-beginscroll-touch-endscroll-touch-edge 事件。 请改用 WebContents 上新提供的 input-event 事件。

// Removed in Electron 23.0
-win.on('scroll-touch-begin', scrollTouchBegin)
-win.on('scroll-touch-edge', scrollTouchEdge)
-win.on('scroll-touch-end', scrollTouchEnd)

// Replace with
+win.webContents.on('input-event', (_, event) => {
+ if (event.type === 'gestureScrollBegin') {
+ scrollTouchBegin()
+ } else if (event.type === 'gestureScrollUpdate') +{
+ scrollTouchEdge()
+ } else if (event.type === 'gestureScrollEnd') {
+ scrollTouchEnd()
+ }
+})

20.x.y 版本结束支持

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

E22(22 年 11 月)E23(23 年 2 月)E24 (23 年 4 月)E25 (23 年 5 月)E26 (23 年 8 月)
22.x.y23.x.y24.x.y25.x.y26.x.y
21.x.y22.x.y23.x.y24.x.y25.x.y
20.x.y21.x.y22.x.y23.x.y24.x.y

接下来是什么

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

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

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

Electron 22.0.0

·5 分钟阅读

Electron 22.0.0 已发布! 它包括一个新的实用程序进程 API、Windows 7/8/8.1 支持更新,以及对 Chromium 108、V8 10.8 和 Node.js 16.17.1 的升级。 阅读下文了解更多详细信息!


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

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

主要变更

堆栈变更

突出显示的功能

UtilityProcess API #36089

新的 UtilityProcess 主进程模块允许创建仅具有 Node.js 集成的轻量级 Chromium 子进程,同时还允许使用 MessageChannel 与沙盒渲染器进行通信。 该 API 基于 Node.js child_process.fork 进行设计,以便于过渡,一个主要区别是入口点 modulePath 必须来自打包的应用程序内,以允许仅加载受信任的脚本。 此外,该模块默认会阻止与渲染器建立通信通道,从而维护主进程是应用程序中唯一受信任进程的契约。

您可以在我们的此处文档中阅读有关新的 UtilityProcess API 的更多信息。

Windows 7/8/8.1 支持更新

信息

2023/02/16:有关 Windows Server 2012 支持的更新

上个月,谷歌宣布Chrome 109 将继续为 Windows Server 2012 和 Windows Server 2012 R2 提供重要的安全修复,直至 2023 年 10 月 10 日。因此,Electron 22(Chromium 108)计划的生命周期结束日期将从 2023 年 5 月 30 日延长至 2023 年 10 月 10 日。Electron 团队将继续把此计划中的任何安全修复反向移植到 Electron 22,直至 2023 年 10 月 10 日。

请注意,我们不会为 Windows 7/8/8.1 提供额外的安全修复。此外,如之前宣布的那样,Electron 23 (Chromium 110) 将仅在 Windows 10 及更高版本上运行。

Electron 22 将是最后一个支持 Windows 7/8/8.1 的 Electron 主要版本。Electron 遵循计划的 Chromium 弃用策略,该策略将在 Chromium 109 中弃用对 Windows 7/8/8.1 的支持(在此处阅读更多信息)

Electron 23 及更高版本的主要版本将不支持 Windows 7/8/8.1。

其他突出变化

  • 增加了对 Linux 和 Windows 上 Web Bluetooth PIN 配对的支持。#35416
  • 添加了 LoadBrowserProcessSpecificV8Snapshot 作为新的熔断器,它将允许主进程/浏览器进程从 browser_v8_context_snapshot.bin 文件加载其 v8 快照。任何其他进程将使用与今天相同的路径。#35266
  • 添加了 WebContents.opener 以访问窗口打开器,以及 webContents.fromFrame(frame) 以获取与 WebFrameMain 实例对应的 WebContents。#35140
  • 通过新的会话处理程序 ses.setDisplayMediaRequestHandler 添加了对 navigator.mediaDevices.getDisplayMedia 的支持。#30702

重大 API 更改

以下是 Electron 22 中引入的重大更改。您可以在计划的重大更改页面上阅读有关这些更改和未来更改的更多信息。

已弃用:webContents.incrementCapturerCount(stayHidden, stayAwake)

webContents.incrementCapturerCount(stayHidden, stayAwake) 已被弃用。现在,当页面捕获完成时,它由 webContents.capturePage 自动处理。

const w = new BrowserWindow({ show: false })

- w.webContents.incrementCapturerCount()
- w.capturePage().then(image => {
- console.log(image.toDataURL())
- w.webContents.decrementCapturerCount()
- })

+ w.capturePage().then(image => {
+ console.log(image.toDataURL())
+ })

已弃用:webContents.decrementCapturerCount(stayHidden, stayAwake)

webContents.decrementCapturerCount(stayHidden, stayAwake) 已被弃用。现在,当页面捕获完成时,它由 webContents.capturePage 自动处理。

const w = new BrowserWindow({ show: false })

- w.webContents.incrementCapturerCount()
- w.capturePage().then(image => {
- console.log(image.toDataURL())
- w.webContents.decrementCapturerCount()
- })

+ w.capturePage().then(image => {
+ console.log(image.toDataURL())
+ })

已移除:WebContents new-window 事件

WebContents 的 new-window 事件已被移除。它被 webContents.setWindowOpenHandler() 替代。

- webContents.on('new-window', (event) => {
- event.preventDefault()
- })

+ webContents.setWindowOpenHandler((details) => {
+ return { action: 'deny' }
+ })

已弃用:BrowserWindow scroll-touch-* 事件

BrowserWindow 上的 scroll-touch-beginscroll-touch-endscroll-touch-edge 事件已被弃用。请改为使用 WebContents 上新提供的 input-event 事件

// Deprecated
- win.on('scroll-touch-begin', scrollTouchBegin)
- win.on('scroll-touch-edge', scrollTouchEdge)
- win.on('scroll-touch-end', scrollTouchEnd)

// Replace with
+ win.webContents.on('input-event', (_, event) => {
+ if (event.type === 'gestureScrollBegin') {
+ scrollTouchBegin()
+ } else if (event.type === 'gestureScrollUpdate') {
+ scrollTouchEdge()
+ } else if (event.type === 'gestureScrollEnd') {
+ scrollTouchEnd()
+ }
+ })

结束对 19.x.y 的支持

根据该项目的支持策略,Electron 19.x.y 已到达支持末期。鼓励开发者和应用程序升级到较新版本的 Electron。

E19(22 年 5 月)E20(22 年 8 月)E21(22 年 9 月)E22(22 年 11 月)E23(23 年 1 月)
19.x.y20.x.y21.x.y22.x.y23.x.y
18.x.y19.x.y20.x.y21.x.y22.x.y
17.x.y18.x.y19.x.y20.x.y21.x.y

接下来是什么

Electron 项目将于 2022 年 12 月暂停,并于 2023 年 1 月恢复。更多信息可以在12 月关闭博客文章中找到。

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

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

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

告别 Windows 7/8/8.1

·3 分钟阅读

从 Electron 23 开始,Electron 将结束对 Windows 7、Windows 8 和 Windows 8.1 的支持。


根据 Chromium 的弃用策略,从 Electron 23 开始,Electron 将结束对 Windows 7、Windows 8 和 Windows 8.1 的支持。这与微软在 2023 年 1 月 10 日结束对 Windows 7 ESUWindows 8.1 扩展的支持一致。

Electron 22 将是最后一个支持低于 10 的 Windows 版本的 Electron 主要版本。Electron 23 及更高版本的主要版本将不支持 Windows 7/8/8.1。旧版本的 Electron 将继续在 Windows 7 上运行,我们将继续为 Electron 22.x 系列发布补丁,直到 2023 年 5 月 30 日,届时 Electron 将结束对 22.x 的支持(根据我们的支持时间线)。

为何弃用?

Electron 遵循计划的 Chromium 弃用策略,该策略将在 Chromium 109 中弃用支持(在此处阅读有关 Chromium 时间线的更多信息)。Electron 23 将包含 Chromium 110,该版本将不支持旧版本的 Windows。

因此,包含 Chromium 108 的 Electron 22 将是最后一个受支持的版本。

弃用时间表

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

  • 2022 年 12 月:Electron 团队将进入假期静默期
  • 2023 年 1 月:所有受支持的发布分支都接受与 Windows 7 和 8 相关的问题。
  • 2023 年 2 月 7 日:Electron 23 发布。
  • 2023 年 2 月 8 日 - 2023 年 5 月 29 日:Electron 将继续接受对早于 Electron 23 的受支持版本的修复。
  • 2023 年 5 月 30 日:Electron 22 到达其支持周期的末期。

这对开发者意味着什么

  • Electron 团队将接受与 Windows 7/8/8.1 相关的稳定支持版本的相关问题和修复,直到每个版本到达其支持周期的末期。
    • 这尤其适用于 Electron 22、Electron 21 和 Electron 20。
  • 对于早于 Electron 23 的 Electron 版本,将接受与 Windows 7/8/8.1 相关的新问题。
    • 任何较新的发布版本都不接受新问题。
  • 一旦 Electron 22 到达其支持周期的末期,所有与 Windows 7/8/8.1 相关的现有问题都将关闭。
信息

2023/02/16:有关 Windows Server 2012 支持的更新

上个月,谷歌宣布Chrome 109 将继续为 Windows Server 2012 和 Windows Server 2012 R2 提供重要的安全修复,直至 2023 年 10 月 10 日。因此,Electron 22(Chromium 108)计划的生命周期结束日期将从 2023 年 5 月 30 日延长至 2023 年 10 月 10 日。Electron 团队将继续把此计划中的任何安全修复反向移植到 Electron 22,直至 2023 年 10 月 10 日。

请注意,我们不会为 Windows 7/8/8.1 提供额外的安全修复。此外,如之前宣布的那样,Electron 23 (Chromium 110) 将仅在 Windows 10 及更高版本上运行。

下一步是什么

如果您有任何问题或疑虑,请随时发送邮件至 [email protected] 与我们联系。您也可以在我们的官方 Electron Discord 中找到社区支持。

寂静之地第二部分 (22 年 12 月)

·一分钟阅读

Electron 项目将于 2022 年 12 月暂停,然后在 2023 年 1 月恢复全速运转。

通过 GIPHY


12 月将保持不变的内容

  1. 零日漏洞和其他主要安全相关的版本将根据需要发布。安全事件应通过 SECURITY.md 报告。
  2. 行为准则报告和审核将继续。

12 月将发生变化的内容

  1. 12 月没有新的稳定版本。12 月最后两周没有夜间版和 Alpha 版发布。
  2. 除少数例外,不进行拉取请求审查或合并。
  3. 不更新任何存储库上的问题跟踪器。
  4. 维护人员不提供 Discord 调试帮助。
  5. 不更新社交媒体内容。

为什么会这样?

凭借 2021 年 12 月静默月的成功,我们希望在 2022 年将其带回。12 月仍然是大多数公司的静默月份,因此我们希望让我们的维护人员有机会充电。每个人都期待着 2023 年,我们期望好事成真!我们鼓励其他项目考虑类似的措施。

介绍 Electron Forge 6

·6 分钟阅读

我们很高兴地宣布 Electron Forge v6.0.0 现在可用!此版本标志着 Forge 自 2018 年以来的第一个主要版本,并将该项目从 electron-userland 移至 Github 上的主要 electron 组织。

继续阅读以了解新功能以及您的应用程序如何采用 Electron Forge!

什么是 Electron Forge?

Electron Forge 是一个用于打包和分发 Electron 应用程序的工具。它将 Electron 的构建工具生态系统统一到一个可扩展的接口中,以便任何人都可以立即开始制作 Electron 应用程序。

主要功能包括

  • 📦 应用程序打包和代码签名
  • 🚚 Windows、macOS 和 Linux 上的可自定义安装程序(DMG、deb、MSI、PKG、AppX 等)
  • ☁️ 云提供商(GitHub、S3、Bitbucket 等)的自动化发布流程
  • ⚡️ 易于使用的 webpack 和 TypeScript 样板模板
  • ⚙️ 本机 Node.js 模块支持
  • 🔌 可扩展的 JavaScript 插件 API
进一步阅读

访问为什么选择 Electron Forge解释文档,以了解有关 Forge 的理念和架构的更多信息。

v6 中的新功能?

完全重写

从 v1 到 v5,Electron Forge 基于现已停止的 electron-compile 项目。Forge 6 是该项目的完全重写,具有新的模块化架构,可以进行扩展以满足任何 Electron 应用程序的需求。

在过去的几年里,Forge v6.0.0-beta 已经实现了与 v5 版本的功能对等,并且代码变动也显著放缓,这使得该工具可以被广泛采用。

请勿安装错误的包

对于 5 及以下的版本,Electron Forge 发布在 npm 上的 electron-forge 包中。从 v6 重写开始,Forge 的结构改为一个包含许多较小项目的 monorepo 项目。

官方支持

从历史上看,Electron 维护者对于构建工具一直没有明确的偏好,将这项任务留给了各种社区包。然而,随着 Electron 项目的成熟,新的 Electron 开发人员越来越难以理解他们需要哪些工具来构建和分发他们的应用程序。

为了帮助指导 Electron 开发人员进行分发过程,我们已决定将 Forge 作为 Electron 官方的开箱即用的构建管道

在过去的一年中,我们一直在缓慢地将 Forge 集成到官方 Electron 文档中,并且最近已将 Forge 从其旧的 electron-userland/electron-forge 移至 electron/forge 仓库。现在,我们终于准备好向广大用户发布 Electron Forge!

入门指南

初始化一个新的 Forge 项目

可以使用 create-electron-app CLI 脚本来搭建一个新的 Electron Forge 项目。

yarn create electron-app my-app --template=webpack
cd my-app
yarn start

该脚本将在 my-app 文件夹中创建一个 Electron 项目,其中包含完整的 JavaScript 打包和预配置的构建管道。

有关更多信息,请参阅 Forge 文档中的 入门指南

一流的 webpack 支持

上面的代码片段使用了 Forge 的 Webpack 模板,我们建议将其作为新 Electron 项目的起点。此模板围绕 @electron-forge/plugin-webpack 插件构建,该插件以多种方式将 webpack 与 Electron Forge 集成,包括

  • 通过 webpack-dev-server 增强本地开发流程,包括在渲染器中支持 HMR;
  • 在应用程序打包之前处理 webpack 包的构建逻辑;以及
  • 在 webpack 打包过程中添加对 Native Node 模块的支持。

如果您需要 TypeScript 支持,请考虑使用 Webpack + TypeScript 模板

导入现有项目

Electron Forge CLI 还包含一个用于导入现有 Electron 项目的命令。

cd my-app
yarn add --dev @electron-forge/cli
yarn electron-forge import

当您使用 import 命令时,Electron Forge 将添加一些核心依赖项并创建一个新的 forge.config.js 配置。如果您有任何现有的构建工具(例如 Electron Packager、Electron Builder 或 Forge 5),它将尝试尽可能多地迁移设置。您的一些现有配置可能需要手动迁移。

手动迁移的详细信息可以在 Forge 导入文档 中找到。如果您需要帮助,请访问 我们的 Discord 服务器

为什么要切换到 Forge?

如果您已经有用于打包和发布 Electron 应用程序的工具,那么采用 Electron Forge 所带来的好处仍然可能超过初始的切换成本。

我们认为使用 Forge 主要有两个好处

  1. Forge 会在 Electron 中支持新功能后立即收到用于应用程序构建的新功能。在这种情况下,您无需自己连接新的工具支持,也无需等待其他软件包最终实现该支持后再进行升级。对于最近的示例,请参阅 macOS 通用二进制文件ASAR 完整性检查

  2. Forge 的多包架构使其易于理解和扩展。由于 Forge 由许多职责明确的较小包组成,因此更容易跟踪代码流。此外,Forge 的可扩展 API 设计意味着您可以编写自己的附加构建逻辑,与提供的配置选项分开,用于高级用例。有关编写自定义 Forge 插件、构建器和发布者的更多详细信息,请参阅文档的 扩展 Electron Forge 部分。

重大更改

Forge 6 在 beta 阶段花费了很长时间,其发布节奏逐渐放缓。但是,我们在 2022 年下半年加快了开发速度,并在 v6.0.0 稳定版发布之前使用最后几个版本来推送一些最终的重大更改。

如果您是 Electron Forge 6 beta 用户,请参阅 v6.0.0 GitHub 发行说明,其中列出了最近的 beta 版本(>=6.0.0-beta.65)中所做的重大更改。

完整的更改和提交列表可以在存储库的 CHANGELOG.md 中找到。

提交您的反馈!

告诉我们您需要什么!Electron Forge 团队一直在努力构建项目,以更好地适应其用户。

您可以通过提交功能请求、发布 问题 或只是让我们知道您的反馈来帮助我们改进 Electron Forge!您还可以加入 官方 Electron Discord 服务器,其中有一个专门用于讨论 Electron Forge 的频道。

如果您想对 https://forge.electron.js.cn 上的 Forge 文档提供任何反馈,我们有一个与 electron-forge/electron-forge-docs 仓库同步的 GitBook 实例。

维护者峰会 2022 回顾

·5 分钟阅读

上个月,Electron 的维护者小组在加拿大温哥华会面,讨论了该项目在 2023 年及以后的发展方向。在会议室里进行了四天的讨论,核心维护者和受邀的合作者讨论了新的倡议、维护痛点和项目总体运行状况。

合影!由 @groundwater 拍摄。

展望未来,团队仍将全力致力于定期快速发布 Chromium 升级、修复错误并使 Electron 对所有人更安全、性能更高。我们还有一些令人兴奋的项目正在进行中,我们很乐意与社区分享!

变革性的新 API

Electron 项目中需要达成共识的主要 API 提案会经过征求意见 (RFC) 流程,该流程将由我们 API 工作组的成员进行审查。

今年,我们推进了两项重大提案,这些提案有可能为 Electron 应用程序解锁新的功能维度。这些提案具有高度的实验性,但这里可以先睹为快!

新的原生插件增强功能(C API)

该提案概述了一个新的 Electron C API 层,该层将允许应用程序开发人员编写自己的 Native Node Addons,这些 Addons 可以与 Electron 的内部资源进行交互,类似于 Node 自己的 Node-API。有关拟议的新 API 的更多信息 可以在这里找到

示例:使用 Chromium 资源增强应用程序

许多 Electron 应用程序维护自己的分支,以直接与 Chromium 内部组件进行交互,而这些组件通常无法使用 vanilla(未修改的)Electron 访问。通过在 C API 层中公开这些资源,此代码可以改为作为与 Electron 并存的原生模块存在,从而可能减少应用程序开发人员的维护负担。

公开 Chromium 的 UI 层(Views API)

在幕后,Chrome 用户界面 (UI) 的非网站部分(例如工具栏、选项卡或按钮)是使用名为 Views 的框架构建的。Views API 提案将此框架的部分内容作为 Electron 中的 JavaScript 类引入,最终目标是允许开发人员创建非 Web UI 元素到他们的 Electron 应用程序。这将防止应用程序不得不拼凑 Web 内容。

使这一组新 API 成为可能的基础工作目前正在进行中。以下是您在不久的将来可以预期的一些首要事项。

示例:使用 WebContentsView 重构窗口模型

我们计划的第一个更改是将 Chrome 的 WebContentsView 公开给 Electron 的 API 表面,这将是我们现有 BrowserView API 的后继者(尽管名称如此,但它是与 Chromium Views 无关的 Electron 特定代码)。通过公开 WebContentsView,我们将拥有一个可重用的 View 对象来显示 Web 内容,从而为使 BrowserWindow 类成为纯 JavaScript 并消除更多代码复杂性打开了大门。

尽管此更改没有为应用程序开发人员提供许多新功能,但它是一个大型重构,可以消除幕后的许多代码,简化 Chromium 升级并降低主要版本之间出现新错误的风险。

如果你是 Electron 开发者,并在你的应用中使用 BrowserView:请别担心,我们没有忘记你们!我们计划将现有的 BrowserView 类作为 WebContentsView 的一个垫片,为你们过渡到较新的 API 提供缓冲。

参见:electron/electron#35658

示例:使用 ScrollView 实现可滚动 Web 内容

我们在 Stack 的朋友一直在推动将 Chromium ScrollView 组件暴露给 Electron 的 API。通过这个新的 API,任何子 View 组件都可以实现水平或垂直滚动。

虽然这个新的 API 仅实现了一个较小的功能,但团队的最终目标是构建一套实用的 View 组件,将其作为工具包来构建更复杂的非 HTML 界面。

参与其中

您是 Electron 应用开发者,对上述任何一个 API 提案感兴趣吗?虽然我们尚未准备好接收额外的 RFC,但请继续关注未来的更多细节!

Electron Forge v6 稳定版发布

自从该框架诞生以来,Electron 的构建工具生态系统主要由社区驱动,并由许多小型、单一用途的软件包组成(例如 electron-winstaller、electron-packager、electron-notarize、electron-osx-sign)。虽然这些工具运行良好,但用户将它们拼凑成一个可用的构建管道是很困难的。

为了帮助 Electron 开发者构建更友好的体验,我们构建了 Electron Forge,这是一个集所有现有工具于一体的解决方案,将其整合到一个单一的界面中。尽管 Forge 自 2017 年以来一直在开发,但该项目在过去几年里处于休眠状态。然而,考虑到社区对 Electron 构建工具状态的反馈,我们一直在努力发布 Forge 的下一代稳定主要版本。

Electron Forge 6 提供了对 TypeScript 和 Webpack 的一流支持,以及一个可扩展的 API,允许开发者创建自己的插件和安装程序。

敬请期待:即将发布公告

如果您有兴趣使用 Forge 构建项目,或者使用 Forge 的可扩展第三方 API 构建模板或插件,请关注我们本月发布的 Forge v6 稳定版本的官方公告!

下一步是什么?

除了以上内容,团队一直在考虑一系列探索性项目,以使 Electron 的体验对应用开发者和最终用户更好。我们还在试验更新工具、API 审查流程和增强的文档。我们希望在不久的将来分享更多消息!

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 install electron@latest 使用 npm 安装它,或者从我们的 发布网站 下载。请继续阅读有关此版本的详细信息。

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

主要变更

堆栈变更

新功能

  • 添加了 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 install electron@latest 使用 npm 安装它,或者从我们的 发布网站 下载。请继续阅读有关此版本的详细信息,并分享您的任何反馈!

主要变更

新功能

  • 在 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. 我们修复了一个缺少包含项会导致依赖于 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 的公共时间表。

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