跳转到主要内容

45 篇标记为“Release”的帖子

关于 Electron 新发布的博客文章

查看所有标签

Electron 37.0.0

·7分钟阅读

Electron 37.0.0 已发布!其中包括对 Chromium 138、V8 13.8 和 Node 22.16.0 的升级。


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

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

重要变更

平滑圆角:原生 CSS 圆角矩形

An image showing different corner smoothing values (0%, 30%, 60%, and 100%) applied to rectangles, with 60% labeled as matching macOS style

Electron 37 引入了自定义 -electron-corner-smoothing CSS 属性,该属性允许应用程序创建更平滑的圆角,以匹配 Apple 的 macOS 设计语言。此功能最初是在 Electron 36 中实现的,但我们认为它值得更受关注。

100% 圆角平滑示例

代码结果
.box {
width: 128px;
height: 128px;
border-radius: 24px;
-electron-corner-smoothing: 100%;
}

与标准的 border-radius 属性不同,该属性会从矩形中裁剪出四分之一圆角,-electron-corner-smoothing 会将曲线平滑地过渡到 圆角矩形 形状,并具有连续的周长。

您可以使用 0% 到 100% 的值来调整平滑度,或者使用 system-ui 值来匹配操作系统的样式(macOS 上为 60%,其他系统上为 0%)。此设计增强功能可应用于边框、轮廓和阴影,为您的应用程序提供微妙的润色。

提示

详细了解 Electron 的圆角矩形实现,请参阅 @clavinRFC 0012。该文档详细介绍了其动机和技术实现。

最初的设计灵感来自 Figma 的圆角平滑实现。在 “Desperately seeking squircles” 中阅读有关他们对平滑圆角的研究。

技术栈变更

Electron 37 将 Chromium 从 136.0.7103.48 升级到 138.0.7204.35,并将 V8 从 13.6 升级到 13.8

Google Summer of Code 开始

我们的两位 Google Summer of Code 贡献者已经开始了该项目的编码期!

  • @nilayarya 正在 Electron 核心中构建一个新的 保存/恢复窗口状态 API。新的 API 将提供一种内置的、标准化的方式来处理窗口状态持久化。请参阅 Nilay 的进行中的 RFC:electron/rfcs#16
  • @hitarth-gg 正在努力使用 Chrome Manifest V3 API 来现代化长期未维护的 Devtron 扩展。该项目将为开发人员提供工具,用于调试 IPC 通信、跟踪事件监听器以及可视化其 Electron 应用程序中的模块依赖关系。

对于我们的 GSoC 参与者来说,这是激动人心的几周,敬请期待更多更新!

新特性与改进

  • window.open 添加了 innerWidthinnerHeight 选项。 #47039 (也存在于 3536 中)
  • 添加了 before-mouse-event 以允许在 webContents 中拦截和阻止鼠标事件。 #47364 (也存在于 36 中)
  • ServiceWorkerMain 添加了 scriptURL 属性。#45863
  • 在 macOS >= 14.4 上为菜单添加了 sublabel 功能。 #47042 (也存在于 3536 中)
  • 添加了对 HIDDevice.collections 的支持。 #47483 (也存在于 36 中)
  • 添加了对 --no-experimental-global-navigator 标志的支持。 #47418 (也存在于 3536 中)
  • 在 Linux X11 上添加了对 screen.dipToScreenPoint(point)screen.screenToDipPoint(point) 的支持。 #46895 (也存在于 3536 中)
  • 增加了对 macOS 上菜单项角色 paletteheader 的支持。#47245
  • 添加了对 node 选项 --experimental-network-inspection 的支持。 #47031 (也存在于 3536 中)
  • 暴露了 win.isContentProtected() 以允许开发人员检查窗口保护状态。 #47310 (也存在于 36 中)

破坏性变更

实用进程未处理的拒绝行为更改

现在,当发生未处理的拒绝时,Utility Process 将会发出一条错误消息警告,而不是使进程崩溃。

要恢复以前的行为,您可以使用

process.on('unhandledRejection', () => {
process.exit(1);
});

行为已更改:process.exit() 同步终止实用进程

在实用工具进程中调用 process.exit() 现在将同步终止该进程。这使得 process.exit() 的行为与 Node.js 的行为保持一致。

请参考 Node.js 文档PR #45690 来了解其潜在影响,例如,在调用 console.log() 之后再调用 process.exit()

行为已更改:WebUSB 和 WebSerial 阻止列表支持

现在,WebUSBWeb Serial 支持 Chromium 使用的 WebUSB 阻止列表Web Serial 阻止列表,这些已在各自的规范中进行了概述。

要禁用这些功能,用户可以传递 disable-usb-blocklistdisable-serial-blocklist 作为命令行标志。

已移除:ProtocolResponsesession 属性的 null

这个已弃用的功能已被移除。

以前,将 ProtocolResponse.session 属性设置为 null 会创建一个随机的独立会话。这已不再受支持。

在此处使用单用途会话会因开销成本而被不鼓励;然而,需要保留此行为的旧代码可以通过创建具有 session.fromPartition(some_random_string) 的随机会话来模拟它,然后将其用于 ProtocolResponse.session

行为已更改:Linux 上的 BrowserWindow.IsVisibleOnAllWorkspaces()

如果窗口当前不可见,BrowserWindow.IsVisibleOnAllWorkspaces() 现在在 Linux 上将返回 false。

停止支持 34.x.y

根据项目的支持策略,Electron 34.x.y 已停止支持。鼓励开发人员和应用程序升级到更新的 Electron 版本。

E37 (25年6月)E38 (25年8月)E39 (25年10月)
37.x.y38.x.y39.x.y
36.x.y37.x.y38.x.y
35.x.y36.x.y37.x.y

下一步计划

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

您可以在此处找到 Electron 的公开时间线

有关未来变更的更多信息,请参阅计划中的破坏性变更页面。

Electron 36.0.0

·阅读时长 5 分钟

Electron 36.0.0 已发布!它包含了对 Chromium 136、V8 13.6 和 Node 22.14.0 的升级。


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

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

重要变更

写作工具支持

在 Electron 36 中,您可以在上下文菜单中启用 macOS 系统级功能,如写作工具(拼写和语法)、自动填充和服务菜单项。为此,请将 WebFrameMain 实例传递给 menu.popup()frame 参数。

import { BrowserWindow, Menu, WebFrameMain } from 'electron';

const currentWindow = BrowserWindow.getFocusedWindow();
const focusedFrame = currentWindow.webContents.focusedFrame;
const menu = Menu.buildFromTemplate([{ label: 'Copy', role: 'copy' }]);

menu.popup({
window: currentWindow,
frame: focusedFrame,
});

技术栈变更

Electron 36 将 Chromium 从 134.0.6998.23 升级到 136.0.7103.48,并将 V8 从 13.5 升级到 13.6

新特性与改进

  • 添加了 BrowserWindow.isSnapped() 来指示给定窗口是否已通过 Windows 上的贴靠功能进行排列。#46226
  • 添加了 WebContents.focusedFrame 来获取当前获得焦点的 frame。
  • 修复了 WebContents.opener,以明确其可能为 null 类型。#45667
  • 为延迟加载配置添加了 ffmpeg.dll#46173 (也存在于 3435 中)
  • 添加了 nativeTheme.shouldUseDarkColorsForSystemIntegratedUI 来区分系统和应用程序主题。 #46598 (也存在于 35 中)
  • webRequest 过滤器添加了 excludeUrls,并弃用了 urls 属性中使用空数组。 #44692 (也存在于 35 中)
  • 通过 menu.popup 中的新 frame 选项,为上下文菜单添加了对 Autofill、Writing Tools 和 Services macOS 级别菜单项的支持。 #46350
  • 在 Linux 上添加了对 system-context-menu 的支持。#46399
  • 改进了 Windows 上的 ASAR 完整性检查。#46537
  • 在 macOS 上请求缩略图时,改进了 desktopCapturer.getSources 的性能。 #46251 (也存在于 3435 中)
  • 移除了使用共享纹理 OSR 时的 240 FPS 限制。 #45669 (也存在于 35 中)

破坏性变更

已弃用:NativeImage.getBitmap()

NativeImage.getBitmap() 函数现已弃用,并被记录为 NativeImage.toBitmap() 的别名。这两个函数都返回一个新分配的位图副本,并且功能上是等效的。

已弃用:session 上的扩展方法和事件

session.loadExtensionsession.removeExtensionsession.getExtensionsession.getAllExtensions 以及事件 extension-loadedextension-unloadedextension-ready 都已移至可通过 session.extensions 实例属性访问的新 Extensions 对象

已移除:session.clearStorageData(options) 中的 quota 类型 syncable

调用 session.clearStorageData(options) 时,options.quota 类型 syncable 不再受支持,因为它已被 移除 了上游 Chromium。

已弃用:session.clearStorageData(options) 中的 quota 属性

调用 Session.clearStorageData(options) 时,options.quota 属性已被弃用。由于 syncable 类型已被移除,现在只剩下一种类型——'temporary'——因此没有必要再指定它。

行为已更改:在 GNOME 上运行时,GTK 4 是默认设置

经过一次上游变更后,在 GNOME 上运行时,现在默认使用 GTK 4。

在极少数情况下,这可能会导致某些应用程序或配置出错,并显示以下消息:

Gtk-ERROR **: 11:30:38.382: GTK 2/3 symbols detected. Using GTK 2/3 and GTK 4 in the same process is not supported

受影响的用户可以通过指定 gtk-version 命令行标志来解决此问题:

$ electron --gtk-version=3   # or --gtk-version=2

同样的操作也可以通过 app.commandLine.appendSwitch 函数完成。

行为变更:app.commandLine

app.commandLine 会将大写的开关和参数转换为小写。

app.commandLine 原本只用于处理 Chromium 开关(这些开关不区分大小写),并且通过 app.commandLine 传递的开关不会传递给任何子进程。

如果您之前使用 app.commandLine 来解析特定于应用的命令行参数,您应该改为通过 process.argv 来实现。

停止支持 33.x.y 版本

根据项目的支持策略,Electron 33.x.y 已停止支持。鼓励开发人员和应用程序升级到更新的 Electron 版本。

E36 (25年4月)E37 (25年6月)E38 (25年8月)
36.x.y37.x.y38.x.y
35.x.y36.x.y37.x.y
34.x.y35.x.y36.x.y

下一步计划

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

您可以在此处找到 Electron 的公开时间线

有关未来变更的更多信息,请参阅计划中的破坏性变更页面。

Electron 35.0.0

·6 分钟阅读

Electron 35.0.0 已发布!它包括对 Chromium 134.0.6998.44、V8 13.5 和 Node 22.14.0 的升级。


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

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

重要变更

用于改进扩展支持的服务工作线程预加载脚本

@samuelmaddockRFC #8 中提出的,Electron 35 增加了将预加载脚本附加到 Service Workers 的能力。随着 Chrome 的 Manifest V3 扩展通过 扩展服务工作线程 路由大量工作,此功能填补了 Electron 对现代 Chrome 扩展支持中的一个空白。

当以编程方式在 Session 级别注册预加载脚本时,您现在可以使用 ses.registerPreloadScript(script) API 将其专门应用于 Service Worker 上下文。

主进程
// Add our preload realm script to the session.
session.defaultSession.registerPreloadScript({
// Our script should only run in service worker preload realms.
type: 'service-worker',
// The absolute path to the script.
script: path.join(__dirname, 'extension-sw-preload.js'),
});

此外,现在可以通过 ServiceWorkerMain.ipc 类在 Service Workers 和其附加的预加载脚本之间进行 IPC 通信。预加载脚本仍将使用 ipcRenderer 模块与其 Service Worker 通信。有关更多详细信息,请参阅原始 RFC。

此功能之前有许多其他更改为其奠定了基础

  • #45329 重新设计了 Session 模块的预加载 API,以支持注册和注销单个预加载脚本。
  • #45229 添加了实验性的 contextBridge.executeInMainWorld(executionScript) 脚本,用于在主世界通过 context bridge 执行 JavaScript。
  • #45341 添加了 ServiceWorkerMain 类,用于在主进程中与 Service Worker 交互。

技术栈变更

Electron 35 将 Chromium 从 132.0.6834.83 升级到 134.0.6998.44,Node 从 20.18.1 升级到 22.14.0,V8 从 13.2 升级到 13.5

新特性

  • Info.plist 添加了 NSPrefersDisplaySafeAreaCompatibilityMode = false,以从应用程序选项中移除“Scale to fit below built-in camera.”。 #45357 (也存在于 v34.1.0 中)
  • 添加了 ServiceWorkerMain 类,用于在主进程中与 Service Worker 交互。#45341
    • ServiceWorkers 上添加了 running-status-changed 事件,用于指示 Service Worker 的运行状态何时发生变化。
    • ServiceWorkers 上添加了 startWorkerForScope,用于启动先前可能已停止的 Worker。
  • 添加了实验性的 contextBridge.executeInMainWorld,用于安全地跨世界边界执行代码。#45330
  • 'console-message' 事件中添加了 frame#43617
  • 在 Windows 上添加了 query-session-end 事件并改进了 session-end 事件。#44598
  • 添加了 view.getVisible()#45409
  • 添加了 webContents.navigationHistory.restore(index, entries) API,允许恢复导航历史记录。#45583
  • BrowserWindow.setVibrancy 添加了可选的动画参数。#35987
  • 添加了对 document.executeCommand("paste") 的权限支持。 #45471 (也存在于 v34.1.0 中)
  • 在 Windows 上添加了 roundedCorners BrowserWindow 构造函数选项的支持。 #45740 (也存在于 v34.3.0 中)
  • 添加了对 Service Worker 预加载脚本的支持。#45408
  • 支持 Portals 的 globalShortcuts。 Electron 必须使用 --enable-features=GlobalShortcutsPortal 运行才能使该功能正常工作。 #45297

破坏性变更

已移除:PrinterInfo 上的 isDefaultstatus 属性

这些属性已从 PrinterInfo 对象中移除,因为它们已从上游 Chromium 中移除。

已弃用:session.serviceWorkers 上的 getFromVersionID

session.serviceWorkers.fromVersionID(versionId) API 已弃用,取而代之的是 session.serviceWorkers.getInfoFromVersionID(versionId)。进行此更改是为了在引入 session.serviceWorkers.getWorkerFromVersionID(versionId) API 时更清楚地表明返回的对象。

// Deprecated
session.serviceWorkers.fromVersionID(versionId);

// Replace with
session.serviceWorkers.getInfoFromVersionID(versionId);

已弃用:Session 上的 setPreloadsgetPreloads

已引入 registerPreloadScriptunregisterPreloadScriptgetPreloadScripts 作为已弃用方法的替代。这些新 API 允许第三方库注册预加载脚本,而无需替换现有脚本。此外,新的 type 选项允许除了 frame 之外的其他预加载目标。

// Deprecated
session.setPreloads([path.join(__dirname, 'preload.js')]);

// Replace with:
session.registerPreloadScript({
type: 'frame',
id: 'app-preload',
filePath: path.join(__dirname, 'preload.js'),
});

已弃用:WebContents 上的 console-message 事件中的 levelmessagelinesourceId 参数

WebContents 上的 console-message 事件已更新,在 Event 参数中提供详细信息。

// Deprecated
webContents.on(
'console-message',
(event, level, message, line, sourceId) => {},
);

// Replace with:
webContents.on(
'console-message',
({ level, message, lineNumber, sourceId, frame }) => {},
);

此外,level 现在是一个字符串,可能的值为 infowarningerrordebug

行为已更改:WebRequestFilterurls 属性。

以前,空 URL 数组被解释为包含所有 URL。要显式包含所有 URL,开发人员现在应该使用 <all_urls> 模式,这是一个 指定的 URL 模式,它匹配每个可能的 URL。此更改阐明了意图并确保了更可预测的行为。

// Deprecated
const deprecatedFilter = {
urls: [],
};

// Replace with
const newFilter = {
urls: ['<all_urls>'],
};

已弃用:systemPreferences.isAeroGlassEnabled()

systemPreferences.isAeroGlassEnabled() 函数已被弃用,没有替代品。自 Electron 23 起,它一直返回 true,因为 Electron 23 仅支持 Windows 10+,在这些系统中 DWM 合成已无法被禁用。

https://learn.microsoft.com/en-us/windows/win32/dwm/composition-ovw#disabling-dwm-composition-windows7-and-earlier

终止对 32.x.y 的支持

根据项目的支持策略,Electron 32.x.y 已停止支持。鼓励开发人员和应用程序升级到更新的 Electron 版本。

E35 (25年3月)E36 (25年4月)E37 (25年6月)
35.x.y36.x.y37.x.y
34.x.y35.x.y36.x.y
33.x.y34.x.y35.x.y

下一步计划

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

您可以在此处找到 Electron 的公开时间线

有关未来变更的更多信息,请参阅计划中的破坏性变更页面。

Electron 34.0.0

·阅读时长 4 分钟

Electron 34.0.0 已发布!其中包括对 Chromium 132.0.6834.83、V8 13.2 和 Node 20.18.1 的升级。


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

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

重要变更

HTTP 压缩共享字典管理 API

HTTP 压缩允许服务器在浏览器接收数据之前对其进行压缩。现代版本的 Chromium 支持 Brotli 和 Zstandard,它们是比 gzip 等旧压缩算法在文本文件上性能更好的新型压缩算法。

自定义共享字典进一步提高了 Brotli 和 Zstandard 压缩的效率。有关共享字典的更多信息,请参阅 Chrome for Developers 博客

@felixrieseberg#44950 中添加了以下 API,用于在 Session 级别管理共享字典。

  • session.getSharedDictionaryUsageInfo()
  • session.getSharedDictionaryInfo(options)
  • session.clearSharedDictionaryCache()
  • session.clearSharedDictionaryCacheForIsolationKey(options)

无响应的渲染器 JavaScript 调用堆栈

当渲染器进程挂起过长时间时,Electron 的 unresponsive 事件就会触发。由 @samuelmaddock#44204 中添加的新 WebFrameMain.collectJavaScriptCallStack() API 允许您从相关的 WebFrameMain 对象(webContnets.mainFrame)收集 JavaScript 调用堆栈。

此 API 在出现长时间运行的 JavaScript 事件导致进程挂起的情况下,对于确定框架无响应的原因可能很有用。有关更多信息,请参阅 提议的 Web 标准崩溃报告 API

主进程
const { app } = require('electron');

app.commandLine.appendSwitch(
'enable-features',
'DocumentPolicyIncludeJSCallStacksInCrashReports',
);

app.on('web-contents-created', (_, webContents) => {
webContents.on('unresponsive', async () => {
// Interrupt execution and collect call stack from unresponsive renderer
const callStack = await webContents.mainFrame.collectJavaScriptCallStack();
console.log('Renderer unresponsive\n', callStack);
});
});
警告

此 API 要求启用 'Document-Policy': 'include-js-call-stacks-in-crash-reports' 标头。有关更多详细信息,请参阅 #45356

技术栈变更

Electron 34 将 Chromium 从 130.0.6723.44 升级到 132.0.6834.83,Node 从 20.18.0 升级到 20.18.1,V8 从 13.0 升级到 13.2

新特性

  • 添加了用于通过 Brotli 或 ZStandard 管理共享字典以提高压缩效率的 API。新 API 包括 session.getSharedDictionaryUsageInfo()session.getSharedDictionaryInfo(options)session.clearSharedDictionaryCache()session.clearSharedDictionaryCacheForIsolationKey(options)#44950
  • 添加了 WebFrameMain.collectJavaScriptCallStack() 用于访问无响应渲染器的 JavaScript 调用堆栈。#44938
  • 为处于卸载状态的帧添加了 WebFrameMain.detached
    • 添加了 WebFrameMain.isDestroyed() 以确定帧是否已被销毁。
    • 修复了 webFrameMain.fromId(processId, frameId) 在框架卸载时返回与给定参数不匹配的 WebFrameMain 实例的问题。 #43473
  • 在实用程序进程中添加了错误事件,以支持 V8 致命错误的诊断报告。#43774
  • 特性:GPU 加速的共享纹理离屏渲染。#42953

破坏性变更

行为已更改:Windows 上全屏时菜单栏将隐藏

这使得行为与 Linux 保持一致。之前的行为:在 Windows 上全屏时菜单栏仍然可见。新的行为:在 Windows 上全屏时菜单栏隐藏。

更正:此项先前被列为 Electron 33 中的重大变更,但实际上是在 Electron 34 中首次发布的。

停止支持 31.x.y

根据项目的支持策略,Electron 31.x.y 已停止支持。鼓励开发人员和应用程序升级到更新的 Electron 版本。

E34 (25年1月)E35 (25年4月)E36 (25年6月)
34.x.y35.x.y36.x.y
33.x.y34.x.y35.x.y
32.x.y33.x.y34.x.y

下一步计划

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

您可以在此处找到 Electron 的公开时间线

有关未来变更的更多信息,请参阅计划中的破坏性变更页面。

Electron 33.0.0

·阅读时长 5 分钟

Electron 33.0.0 现已发布!此版本升级到了 Chromium 130.0.6723.44、V8 13.0 和 Node 20.18.0。


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

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

重要变更

亮点

  • 添加了一个处理程序 app.setClientCertRequestPasswordHandler(handler),用于在需要 PIN 码时帮助解锁加密设备。#41205
  • 扩展了 navigationHistory API,新增了 2 个函数以实现更好的历史记录管理。#42014
  • 改进了原生主题透明度检查。#42862

技术栈变更

Electron 33 将 Chromium 从 128.0.6613.36 升级到 130.0.6723.44,Node 从 20.16.0 升级到 20.18.0,V8 从 12.8 升级到 13.0

新特性

  • 添加了一个处理程序 app.setClientCertRequestPasswordHandler(handler),用于在需要 PIN 码时帮助解锁加密设备。#41205
  • 在 utility process 中添加了 error 事件,以支持对 V8 致命错误的诊断报告。#43997
  • 添加了 View.setBorderRadius(radius),用于自定义视图的边框圆角,并兼容 WebContentsView#42320
  • 扩展了 navigationHistory API,新增了 2 个函数以实现更好的历史记录管理。#42014

破坏性变更

移除:对 macOS 10.15 的支持

Chromium 不再支持 macOS 10.15 (Catalina)。

旧版本的 Electron 将继续在 Catalina 上运行,但运行 Electron v33.0.0 及更高版本需要 macOS 11 (Big Sur) 或更高版本。

行为已更改:原生模块现在需要 C++20

由于上游的更改,V8Node.js 都现在要求 C++20 作为最低版本。使用原生 node 模块的开发人员应该使用 --std=c++20 而不是 --std=c++17 来构建他们的模块。使用 gcc9 或更低版本的镜像可能需要更新到 gcc10 才能编译。有关更多详细信息,请参阅 #43555

行为已更改:Windows 上的自定义协议 URL 处理

由于 Chromium 为支持 非特殊 scheme URL 所做的更改,使用 Windows 文件路径的自定义协议 URL 将不再能与已弃用的 protocol.registerFileProtocol 以及 BrowserWindow.loadURLWebContents.loadURL<webview>.loadURL 上的 baseURLForDataURL 属性正确配合使用。protocol.handle 也无法与这些类型的 URL 一起使用,但这并非更改,因为其一直如此。

// No longer works
protocol.registerFileProtocol('other', () => {
callback({ filePath: '/path/to/my/file' });
});

const mainWindow = new BrowserWindow();
mainWindow.loadURL(
'data:text/html,<script src="loaded-from-dataurl.js"></script>',
{ baseURLForDataURL: 'other://C:\\myapp' },
);
mainWindow.loadURL('other://C:\\myapp\\index.html');

// Replace with
const path = require('node:path');
const nodeUrl = require('node:url');
protocol.handle(other, (req) => {
const srcPath = 'C:\\myapp\\';
const reqURL = new URL(req.url);
return net.fetch(
nodeUrl.pathToFileURL(path.join(srcPath, reqURL.pathname)).toString(),
);
});

mainWindow.loadURL(
'data:text/html,<script src="loaded-from-dataurl.js"></script>',
{ baseURLForDataURL: 'other://' },
);
mainWindow.loadURL('other://index.html');

行为已更改:app 上的 login 事件中的 webContents 属性

当为使用 respondToAuthRequestsFromMainProcess 选项创建的 实用进程发出的请求触发时,applogin 事件中的 webContents 属性将为 null

已弃用:BrowserWindowConstructorOption.type 中的 textured 选项

BrowserWindowConstructorOptionstypetextured 选项已被弃用,没有替代方案。此选项依赖于 macOS 上的 NSWindowStyleMaskTexturedBackground 样式掩码,该掩码已被弃用且没有替代方案。

已弃用:systemPreferences.accessibilityDisplayShouldReduceTransparency

systemPreferences.accessibilityDisplayShouldReduceTransparency 属性现已废弃,推荐使用新的 nativeTheme.prefersReducedTransparency,它提供相同的信息并且可以跨平台工作。

// Deprecated
const shouldReduceTransparency =
systemPreferences.accessibilityDisplayShouldReduceTransparency;

// Replace with:
const prefersReducedTransparency = nativeTheme.prefersReducedTransparency;

终止对 30.x.y 版本的支持

根据项目的支持策略,Electron 30.x.y 已停止支持。鼓励开发人员和应用程序升级到更新的 Electron 版本。

E33 (24年10月)E34 (25年1月)E35 (25年4月)
33.x.y34.x.y35.x.y
32.x.y33.x.y34.x.y
31.x.y32.x.y33.x.y

下一步计划

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

您可以在此处找到 Electron 的公开时间线

有关未来变更的更多信息,请参阅计划中的破坏性变更页面。

Electron 32.0.0

·阅读时长 5 分钟

Electron 32.0.0 已发布! 此版本包含了对 Chromium 128.0.6613.36、V8 12.8 和 Node 20.16.0 的升级。


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

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

重要变更

亮点

  • 在我们的文档中添加了新的 API 版本历史记录,这是由 @piotrpdev 作为 Google Summer of Code 项目的一部分创建的功能。您可以在 这篇博客文章 中了解更多信息。 #42982
  • 从 Web File API 中移除了非标准的 File.path 扩展。#42053
  • 在尝试在被阻止的路径中打开文件或目录时,Web 文件系统 API 的失败路径已与上游保持一致。 #42993
  • 将现有的导航相关 API canGoBackgoBackcanGoForwardgoForwardcanGoToOffsetgoToOffsetclear 添加到 webcontents.navigationHistory。先前的导航 API 已被弃用。 #41752

技术栈变更

Electron 32 将 Chromium 从 126.0.6478.36 升级到 128.0.6613.36,Node 从 20.14.0 升级到 20.16.0,V8 从 12.6 升级到 12.8

新特性

  • 添加了通过 app 模块的 'login' 事件响应由实用进程发起的身份验证请求的支持。 #43317
  • CPUUsage 结构添加了 cumulativeCPUUsage 属性,该属性返回自进程启动以来使用的 CPU 时间总秒数。 #41819
  • 将现有的导航相关 API canGoBackgoBackcanGoForwardgoForwardcanGoToOffsetgoToOffsetclear 添加到 webContents.navigationHistory#41752
  • 扩展了 WebContentsView 以接受预先存在的 webContents 对象。#42086
  • nativeTheme 添加了一个新属性 prefersReducedTransparency,它指示用户是否已通过系统可访问性设置选择减少操作系统级别的透明度。 #43137
  • 在文件系统访问 API 中,当尝试打开被阻止路径中的文件或目录时,其失败路径与上游保持一致。#42993
  • 在 Linux 上启用了 Windows 控件覆盖 API。#42681
  • 在网络请求中启用了 zstd 压缩。#43300

破坏性变更

已移除:File.path

Web File 对象中的非标准 path 属性是在 Electron 的早期版本中添加的,作为在渲染器中处理本机文件的便捷方法,当时在渲染器中完成所有工作更为常见。然而,它偏离了标准,并且存在轻微的安全风险,因此从 Electron 32.0 开始,它已被移除,取而代之的是 webUtils.getPathForFile 方法。

// Before (renderer)
const file = document.querySelector('input[type=file]');
alert(`Uploaded file path was: ${file.path}`);
// After (renderer)
const file = document.querySelector('input[type=file]');
electron.showFilePath(file);

// After (preload)
const { contextBridge, webUtils } = require('electron');

contextBridge.exposeInMainWorld('electron', {
showFilePath(file) {
// It's best not to expose the full file path to the web content if
// possible.
const path = webUtils.getPathForFile(file);
alert(`Uploaded file path was: ${path}`);
},
});

已弃用:WebContents 上的 clearHistorycanGoBackgoBackcanGoForwardgoForwardgoToIndexcanGoToOffsetgoToOffset

WebContents 实例上的导航相关 API 已被弃用。这些 API 已移至 WebContentsnavigationHistory 属性,以提供更结构化和直观的界面来管理导航历史。

// Deprecated
win.webContents.clearHistory();
win.webContents.canGoBack();
win.webContents.goBack();
win.webContents.canGoForward();
win.webContents.goForward();
win.webContents.goToIndex(index);
win.webContents.canGoToOffset();
win.webContents.goToOffset(index);

// Replace with
win.webContents.navigationHistory.clear();
win.webContents.navigationHistory.canGoBack();
win.webContents.navigationHistory.goBack();
win.webContents.navigationHistory.canGoForward();
win.webContents.navigationHistory.goForward();
win.webContents.navigationHistory.canGoToOffset();
win.webContents.navigationHistory.goToOffset(index);

行为已更改:userData 中的 databases 目录将被删除

如果您在 app.getPath('userData') 返回的目录中有名为 databases 的目录,它将在首次运行时被删除 Electron 32。databases 目录由 WebSQL 使用,WebSQL 在 Electron 31 中已被移除。Chromium 现在执行清理操作以删除此目录。有关更多信息,请参阅 issue #45396

终止对 29.x.y 的支持

根据项目的支持策略,Electron 29.x.y 已停止支持。鼓励开发人员和应用程序升级到更新的 Electron 版本。

E32 (24年8月)E33 (24年10月)E34 (25年1月)
32.x.y33.x.y34.x.y
31.x.y32.x.y33.x.y
30.x.y31.x.y32.x.y

下一步计划

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

您可以在此处找到 Electron 的公开时间线

有关未来变更的更多信息,请参阅计划中的破坏性变更页面。

Electron 31.0.0

·阅读时长 4 分钟

Electron 31.0.0 已发布!它包含了 Chromium 126.0.6478.36、V8 12.6 和 Node 20.14.0 的升级。


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

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

重要变更

亮点

  • 扩展了 WebContentsView 以接受预先存在的 webContents 对象。#42319
  • 添加了对 NODE_EXTRA_CA_CERTS 的支持。#41689
  • 更新了 window.flashFrame(bool) 以在 macOS 上持续闪烁。#41391
  • 移除了 WebSQL 支持#41868
  • nativeImage.toDataURL 将保留 PNG 颜色空间#41610
  • 扩展了 webContents.setWindowOpenHandler 以支持手动创建 BrowserWindow。#41432

技术栈变更

Electron 31 将 Chromium 从 124.0.6367.49 升级到 126.0.6478.36,Node 从 20.11.1 升级到 20.14.0,V8 从 12.4 升级到 12.6

新特性

  • Session 添加了 clearData 方法。#40983
    • Session.clearData API 添加了 options 参数。#41355
  • 添加了对 navigator.serial 中服务类 ID 请求蓝牙端口的支持。#41638
  • 添加了对 Node 的 NODE_EXTRA_CA_CERTS 环境变量的支持。 #41689
  • 扩展了 webContents.setWindowOpenHandler 以支持手动创建 BrowserWindow。#41432
  • 实现了对 Web 标准 文件系统 API 的支持。 #41419
  • 扩展了 WebContentsView 以接受预先存在的 WebContents 实例。#42319
  • 在 webContents API 上添加了一个新的实例属性 navigationHistory,其中包含 navigationHistory.getEntryAtIndex 方法,使应用程序能够检索浏览历史中任何导航条目的 URL 和标题。 #41577 (也存在于 2930 中)

破坏性变更

已移除:WebSQL 支持

Chromium 已在上游移除了对 WebSQL 的支持,仅将其迁移到 Android。有关更多信息,请参阅 Chromium 的移除意向讨论

行为已更改:nativeImage.toDataURL 将保留 PNG 颜色空间

PNG 解码器实现已更改为保留颜色空间数据。此函数返回的编码数据现在与其匹配。

有关更多信息,请参阅 crbug.com/332584706

行为已更改:win.flashFrame(bool) 将在 macOS 上连续闪烁 Dock 图标

这使得行为与 Windows 和 Linux 保持一致。先前行为:第一个 flashFrame(true) 只会弹跳一次 Dock 图标(使用 NSInformationalRequest 级别),而 flashFrame(false) 不起作用。新行为:连续闪烁直到调用 flashFrame(false)。这使用的是 NSCriticalRequest 级别。要明确使用 NSInformationalRequest 来触发一次 Dock 图标弹跳,仍然可以使用 dock.bounce('informational')

28.x.y 版本支持结束

根据项目的支持策略,Electron 28.x.y 已停止支持。鼓励开发人员和应用程序升级到更新的 Electron 版本。

E31 (24年6月)E32 (24年8月)E33 (24年10月)
31.x.y32.x.y33.x.y
30.x.y31.x.y32.x.y
28.x.y29.x.y31.x.y

下一步计划

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

您可以在此处找到 Electron 的公开时间线

有关未来变更的更多信息,请参阅计划中的破坏性变更页面。

Electron 30.0.0

·阅读时长 5 分钟

Electron 30.0.0 已发布!它包括对 Chromium 124.0.6367.49、V8 12.4 和 Node.js 20.11.1 的升级。


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

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

重要变更

亮点

  • ASAR 完整性保险丝现在在 Windows 上受支持 (#40504)
    • 如果配置不正确,现有已启用 ASAR 完整性的应用程序可能无法在 Windows 上运行。使用 Electron 打包工具的应用程序应升级到 @electron/packager@18.3.1@electron/forge@7.4.0
    • 请查看我们的ASAR 完整性教程以获取更多信息。
  • 添加了主进程模块 WebContentsViewBaseWindow,弃用了并替换了 BrowserView#35658)。在 这篇博客文章 中了解如何从 BrowserView 迁移到 WebContentsView
    • BrowserView 现在是 WebContentsView 的一个垫片,旧的实现已被移除。
    • 请参阅我们的 Web 嵌入文档,了解新的 WebContentsView API 与其他类似 API 的比较。
  • 实现了对 文件系统 API 的支持(#41827

技术栈变更

Electron 30 将 Chromium 从 122.0.6261.39 升级到 124.0.6367.49,Node 从 20.9.0 升级到 20.11.1,V8 从 12.2 升级到 12.4

新特性

  • 为 webview 添加了 transparent webpreference。(#40301)
  • 在 webContents API 上添加了一个新的实例属性 navigationHistory,其中包含 navigationHistory.getEntryAtIndex 方法,使应用程序能够检索浏览历史中任何导航条目的 URL 和标题。(#41662
  • 添加了新的 BrowserWindow.isOccluded() 方法,允许应用程序检查遮挡状态。(#38982)
  • 为从 utility 进程发出的 net 模块请求添加了代理配置支持。(#41417)
  • navigator.serial 中添加了对按服务类 ID 请求蓝牙端口的支持。(#41734)
  • 添加了对 Node.js NODE_EXTRA_CA_CERTS 命令行标志的支持。(#41822

破坏性变更

行为已更改:跨域 iframe 现在使用权限策略访问功能

跨域 iframe 现在必须通过 allow 属性指定可用于给定 iframe 的功能,才能访问它们。

更多信息请参阅文档

已移除:--disable-color-correct-rendering 命令行开关

这个开关从未被正式记录,但在此仍会注明其移除。Chromium 本身现在对颜色空间有更好的支持,所以应该不再需要这个标志。

行为已更改:macOS 上的 BrowserView.setAutoResize 行为

在 Electron 30 中,BrowserView 现在是新的 WebContentsView API 的一个包装器。

以前,BrowserView API 的 setAutoResize 函数在 macOS 上基于自动调整大小,而在 Windows 和 Linux 上则基于自定义算法。对于简单的用例,例如使 BrowserView 填充整个窗口,这两种方法的行为是相同的。然而,在更高级的情况下,BrowserView 在 macOS 上的自动调整大小方式与其他平台不同,因为 Windows 和 Linux 的自定义调整大小算法与 macOS 的自动调整大小 API 的行为不完全匹配。现在所有平台的自动调整大小行为都已标准化。

如果您的应用程序使用 BrowserView.setAutoResize 来执行比使 BrowserView 填充整个窗口更复杂的任务,那么您可能已经采用了自定义逻辑来处理 macOS 上的这种行为差异。如果是这样,在 Electron 30 中将不再需要该逻辑,因为自动调整大小行为是一致的。

已移除:WebContents 上的 context-menu 事件中的 params.inputFormType 属性

WebContentscontext-menu 事件中 params 对象的 inputFormType 属性已被移除。请改用新的 formControlType 属性。

已移除:process.getIOCounters()

Chromium 已移除对该信息的访问。

27.x.y 版本支持结束

根据项目的支持策略,Electron 27.x.y 已停止支持。鼓励开发人员和应用程序升级到更新的 Electron 版本。

E30 (24年4月)E31 (24年6月)E32 (24年8月)
30.x.y31.x.y32.x.y
29.x.y30.x.y31.x.y
28.x.y29.x.y30.x.y

下一步计划

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

您可以在此处找到 Electron 的公开时间线

有关未来变更的更多信息,请参阅计划中的破坏性变更页面。

Electron 29.0.0

·阅读时长 5 分钟

Electron 29.0.0 已发布!它包含了 Chromium 122.0.6261.39、V8 12.2 和 Node.js 20.9.0 的升级。


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

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

重要变更

亮点

  • 添加了一个新的顶级 webUtils 模块,这是一个渲染器进程模块,它提供了一个实用层来与 Web API 对象进行交互。模块中第一个可用的 API 是 webUtils.getPathForFile。Electron 以前对 File.path 的增强偏离了 Web 标准;这个新 API 更符合当前 Web 标准的行为。

技术栈变更

Electron 29 将 Chromium 从 120.0.6099.56 升级到 122.0.6261.39,Node 从 18.18.2 升级到 20.9.0,V8 从 12.0 升级到 12.2

新特性

  • 添加了新的 webUtils 模块,这是一个用于与 Web API 对象交互的实用工具层,用于替换 File.path 增强。 #38776
  • 实用进程 添加了 net 模块。 #40890
  • 添加了一个新的 Electron FusegrantFileProtocolExtraPrivileges,它使 file:// 协议采用更安全、更严格的行为,与 Chromium 保持一致。 #40372
  • protocol.registerSchemesAsPrivileged 中添加了一个选项,允许在自定义方案中使用 V8 代码缓存。 #40544
  • 在 macOS 13.0+ 上,已将 app.{set|get}LoginItemSettings(settings) 迁移到使用 Apple 新推荐的底层框架。 #37244

破坏性变更

行为已更改:ipcRenderer 不能再通过 contextBridge 发送

尝试将整个 ipcRenderer 模块作为对象发送到 contextBridge 现在将在桥的接收端得到一个空对象。此更改是为了消除/减轻安全隐患。您不应该直接通过桥暴露 ipcRenderer 或其方法。而是提供一个安全的包装器,如下所示:

contextBridge.exposeInMainWorld('app', {
onEvent: (cb) => ipcRenderer.on('foo', (e, ...args) => cb(args)),
});

已移除:app 上的 renderer-process-crashed 事件

app 上的 renderer-process-crashed 事件已被移除。请改用新的 render-process-gone 事件。

// Removed
app.on('renderer-process-crashed', (event, webContents, killed) => {
/* ... */
});

// Replace with
app.on('render-process-gone', (event, webContents, details) => {
/* ... */
});

已移除:WebContents<webview> 上的 crashed 事件

WebContents<webview> 上的 crashed 事件已被移除。请改用新的 render-process-gone 事件。

// Removed
win.webContents.on('crashed', (event, killed) => {
/* ... */
});
webview.addEventListener('crashed', (event) => {
/* ... */
});

// Replace with
win.webContents.on('render-process-gone', (event, details) => {
/* ... */
});
webview.addEventListener('render-process-gone', (event) => {
/* ... */
});

已移除:app 上的 gpu-process-crashed 事件

app 上的 gpu-process-crashed 事件已被移除。请改用新的 child-process-gone 事件。

// Removed
app.on('gpu-process-crashed', (event, killed) => {
/* ... */
});

// Replace with
app.on('child-process-gone', (event, details) => {
/* ... */
});

26.x.y 版本停止支持

根据项目的支持策略,Electron 26.x.y 已停止支持。鼓励开发人员和应用程序升级到更新的 Electron 版本。

E29 (24年2月)E30 (24年4月)E31 (24年6月)
29.x.y30.x.y31.x.y
28.x.y29.x.y30.x.y
27.x.y28.x.y29.x.y

下一步计划

您是否知道 Electron 最近添加了一个社区 RFC(请求评论)流程?如果您想向框架添加功能,RFC 可以是与维护者就其设计进行对话的有用工具。您也可以在拉取请求中查看即将进行的更改。要了解更多信息,请查看我们的 Introducing electron/rfcs 博客文章,或直接查看 electron/rfcs 存储库的 README。

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

您可以在此处找到 Electron 的公开时间线

有关未来变更的更多信息,请参阅计划中的破坏性变更页面。

Electron 28.0.0

·阅读时长 4 分钟

Electron 28.0.0 已发布! 此版本升级了 Chromium 120.0.6099.56、V8 12.0 和 Node.js 18.18.2


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

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

重要变更

亮点

  • 实现了对 ECMAScript 模块或 ESM 的支持(什么是 ECMAScript 模块?在此了解更多。这包括对 Electron 本身中的 ESM 的支持,以及诸如 UtilityProcess API 入口点等领域。有关更多详细信息,请参阅我们的 ESM 文档
  • 除了在 Electron 本身中启用 ESM 支持外,Electron Forge 还支持使用 ESM 来打包、构建和开发 Electron 应用程序。您可以在 Forge v7.0.0 或更高版本中找到此支持。

技术栈变更

新特性

  • 启用了 ESM 支持。 #37535
  • UtilityProcess API 添加了 ESM 入口。 #40047
  • display 对象添加了多个属性,包括 detectedmaximumCursorSizenativeOrigin#40554
  • 在 Linux 上增加了对 ELECTRON_OZONE_PLATFORM_HINT 环境变量的支持。 #39792

破坏性变更

行为已更改:WebContents.backgroundThrottling 设置为 false 会影响主机 BrowserWindow 中的所有 WebContents

WebContents.backgroundThrottling 设置为 false 将禁用 BrowserWindow 中所有由它显示的 WebContents 的帧节流。

已移除:BrowserWindow.setTrafficLightPosition(position)

BrowserWindow.setTrafficLightPosition(position) 已移除,应改用 BrowserWindow.setWindowButtonPosition(position) API,该 API 接受 null 而不是 { x: 0, y: 0 } 来将位置重置为系统默认值。

// Removed in Electron 28
win.setTrafficLightPosition({ x: 10, y: 10 });
win.setTrafficLightPosition({ x: 0, y: 0 });

// Replace with
win.setWindowButtonPosition({ x: 10, y: 10 });
win.setWindowButtonPosition(null);

已移除:BrowserWindow.getTrafficLightPosition()

BrowserWindow.getTrafficLightPosition() 已移除,应改用 BrowserWindow.getWindowButtonPosition() API,该 API 在没有自定义位置时返回 null 而不是 { x: 0, y: 0 }

// Removed in Electron 28
const pos = win.getTrafficLightPosition();
if (pos.x === 0 && pos.y === 0) {
// No custom position.
}

// Replace with
const ret = win.getWindowButtonPosition();
if (ret === null) {
// No custom position.
}

已移除: ipcRenderer.sendTo()

ipcRenderer.sendTo() API 已移除。应将其替换为在渲染器之间设置 MessageChannel

IpcRendererEventsenderIdsenderIsMainFrame 属性也已被移除。

已移除:app.runningUnderRosettaTranslation

app.runningUnderRosettaTranslation 属性已被移除。 请改用 app.runningUnderARM64Translation

// Removed
console.log(app.runningUnderRosettaTranslation);
// Replace with
console.log(app.runningUnderARM64Translation);

终止对 25.x.y 版本的支持

根据项目的支持策略,Electron 25.x.y 已停止支持。鼓励开发人员和应用程序升级到更新的 Electron 版本。

E28 (23年12月)E29 (24年2月)E30 (24年4月)
28.x.y29.x.y30.x.y
27.x.y28.x.y29.x.y
26.x.y27.x.y28.x.y

下一步计划

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

您可以在此处找到 Electron 的公开时间线

有关未来变更的更多信息,请参阅计划中的破坏性变更页面。