Electron 是什么?简单来说,它是一套让你能用 Ja vaScript、HTML 和 CSS 去构建跨平台桌面应用的框架。它巧妙地融合了 Node.js 的后端能力和 Chromium 的前端渲染,像 Atom 编辑器这类工具就是它的代表作。最关键的是,你只需要写一套代码,就能覆盖 macOS、Windows 和 Linux 三个主流平台。
现在,Electron v40.0.0 正式发布了。这次更新干货不少,涵盖了底层组件升级、功能增强和一堆问题修复,下面来逐项看看。
技术栈全面升级
这次的底座换得挺彻底:
- Chromium 内核升级到了
144.0.7559.60,顺带也回顾了一下 143 版本的新特性概况。 - Node.js 也一并升级到了
v24.11.1。 - 底层的 V8 引擎则更新到了
14.4版本。
值得注意的不兼容变更
有几个地方需要开发者们特别留神:
- 渲染进程里直接访问剪贴板 API 的方式,已经被标记为弃用了(详情见 #48923)。如果正在用,建议尽快迁移。
- 另外,调试符号文件的上传逻辑做了调整:之前用的
dsym.zip格式,现在换成了tar.xz压缩包(#48952)。如果你有自动化构建流程,记得更新相关配置。
新增功能亮点
这次新加的功能挺丰富,挑几个重点说一下:
- 子进程异常退出时,现在多了一个可能的原因描述:
"memory-eviction"(#48362)。这对排查内存相关错误很有帮助。 - 离屏渲染方面,新增了对 scRGB HDR 色彩空间的支持,并且引入了
RGBAF16输出格式(#48265)。这意味着在高动态范围显示场景下,Electron 应用能呈现更真实的色彩。 - 新增了
app.isHardwareAccelerationEnabled()接口(#47614)。这是一个很贴心的补充,让开发者能搞清楚硬件加速到底有没有生效,而不再全靠猜。 - 网络请求层面,
net.request新增了bypassCustomProtocolHandlers配置项(#48883)。当你想绕过自定义的协议处理器时,这就派上用场了。 - 辅助功能(Accessibility)的控制机制变得更精细(#48042),能让无障碍支持做得更到位。
- WebSocket 连接现在可以通过
webContents的login事件来支持身份验证了(#49064)。 - 外部共享纹理现在可以被导入并转换成
VideoFrame对象(#48831)。这对于视频处理或高性能渲染场景来说是个实用增强。 - Linux 平台正式得到了
systemPreferences.getAccentColor()方法(#48027),可以获取系统当前的强调色。 - 文件系统 API 的授权状态现在可以在指定会话(session)中持久化保存了(#48170)。
- 开发者工具在触发“检查元素”或断点调试时,会自动获得焦点(#4638),工作流会顺畅很多。
优化与改进
- 强调色的重置逻辑做了优化。以前如果调用过
window.setAccentColor(null),系统颜色可能不会正确恢复;现在已能正确响应系统级的设置了(#48274)。 - 在非上下文隔离(non-context-isolated)的预加载脚本中,现在支持动态导入 ESM 模块(#48375)。这对模块化开发更友好了。
nativeImage.createFromNamedImage方法现在已经兼容 SF Symbols 名称的调用(#48772)。如果你在 macOS 上开发,这个更新会很顺手。
问题修复清单
这次修复的问题也很有针对性:
- Windows 平台新增了
--no-stdio-init启动参数,用于禁用空设备初始化(#47870)。 - 修复了 Windows/Linux 下,启用 Cookie 加密时,加密密钥提供程序未能正确传递到网络服务的问题(#49375, #49350)。
- 修复了进程退出阶段,因模块解析引发的一个崩溃问题(#49104)。
- 修复了子窗口拖拽区域识别异常的问题(#49312)。
- 修复了圆角窗口在渲染时边缘出现锯齿的问题(#48782)。
- Cookie 加密逻辑做了重构,回退采用了 M142 中已验证稳定的
os_crypt同步实现(#49384)。 - 修复了 Windows 平台窗口在缩放过程中间出现的视觉错位问题(#49191)。
