GUI开发工具集-Electron
2023-05-04 12:56:15 阿炯

Electron(原名为Atom Shell)是GitHub开发的一个开源框架。它通过使用Node.js(作为后端)和Chromium的渲染引擎(作为前端)完成跨平台的桌面GUI应用程序的开发。Electron现已被多个开源Web应用程序用于前端与后端的开发,著名项目包括GitHub的Atom和微软的Visual Studio Code。其主体在MIT协议下授权。


Build cross-platform desktop apps with JavaScript, HTML, and CSS.

Electron是基于 Web 技术构建跨平台桌面端框架,也叫做 GUI 程序,即Electron = Chromium + Node.js + Native APIs。

一个基础的Electron包含三个文件:package.json(元数据)、main.js(代码)和index.html(图形用户界面)。框架由Electron可执行文件(Windows中为electron.exe、macOS中为electron.app、Linux中为electron)提供。开发者可以自行添加标志、自定义图标、重命名或编辑Electron可执行文件。

2013年4月11日,Electron以Atom Shell为名起步。
2014年5月6日,Atom以及Atom Shell以MIT许可证开源。
2015年4月17日,Atom Shell改名为Electron。
2016年5月11日,1.0版本发布。
2016年5月20日,允许向Mac应用商店提交软件包。
2016年8月2日,支持Windows商店。

由于其紧跟版本帝Chromium的脚本,因此更新非常频繁。

桌面软件(办公、个人工具),仍然是未来十几年 PC 端需求之一,Electron 技术是流行趋势,入门简单(JavaScript+CSS的网页开发基础)、跨平台、开源免费、工程化、安全等特性,国内有如QQ、百度翻译、阿里网盘、迅雷、有道云笔记 ...... 等相关软件基于此开发或已经迁移到该框架。其发展动态可参考《Electron发展记事(202x)》。


最新版本:30
v30.0于2024年4月中旬发布,更新内容如下:
Chromium 124.0.6367.49
Node 20.11.1
V8 12.4

添加了 WebContentsView 和 BaseWindow,替换了现已弃用的 BrowserViewAPI。
为 ASAR Integrity Integrity fuse 添加了 Windows 支持。
将 Chromium 更新为 122.0.6194.0(Behavior Changed:cross-origin iframe 现在使用权限策略来访问功能)
将 Chromium 更新为 122.0.6236.2(已删除:--disable-color- Correct-rendering 开关)
context-menuparams 中的 inputFieldType 属性已被删除。
将 Chromium 更新为 124.0.6323.0(已删除:process.getIOCounters ())

向网络视图添加了 transparent 网络首选项。
为 webContents API 添加了一个新的实例属性 navigationHistory,其中包含 navigationHistory.getEntryAtIndex 方法,可让应用程序检索浏览历史中任何导航条目的 URL 和标题。
添加了一种新方法 BrowserWindow.isOccluded() 以允许应用程序检查闭塞状态。
将 net 模块添加到实用程序进程中。
添加了对实用程序进程中使用 net 模块发出的请求的代理配置支持。
添加了对通过 navigator.serial 中的服务类 ID 请求蓝牙端口的支持。
添加了对 NODE_EXTRA_CA_CERTS 的支持。
实现了对文件系统 API 的支持。

删除/弃用:从 Windows zip 文件中删除了无关的 dll。

修复了 BrowserViews 默认为白色而不是透明的问题。#40866
修复了在调用 loadURL() 失败后立即调用 WebContents.loadURL() 时不正确地导致失败的问题。#40661
修复了禁用最大化并启用 WCO 的窗口仍会显示其最大化按钮的错误。#41805
修复了清理关联的 WebContents 后关闭 WebContentsView 或与之交互可能出现的崩溃问题。#41154
修复了 app.getLoginItemSettings 未正确抛出错误的问题。 #41667
修复了 BrowserWindow 中的子视图有时可能出现的问题。#41802
修复了在 Mac 上显示或聚焦面板窗口会激活应用程序的问题。#41844
改进了使用 Windows Control Overlay 时 Windows 11 上的标题按钮的外观。#41586
在加载无效 URL 时正确拒绝 webcontents.loadURL promise。#41194

终止对 27.xy 的支持
根据项目的支持政策,Electron 27.xy 已结束支持。鼓励开发人员和应用程序升级到较新版本的 Electron。

更多详情可查看发行说明

最新版本:39
v39.0于2025年10月下旬发布,其带来一系列核心依赖更新、新功能引入以及关键缺陷修复。本次发布聚焦于底层运行时现代化与开发者能力增强,为构建高性能桌面应用提供了更坚实的基础。它不仅带来了性能与安全性的提升,还扩展了系统集成能力,特别是在图像处理、硬件交互和无障碍支持方面迈出关键一步。

核心运行时全面升级:本版本同步了 Chromium、Node.js 和 V8 的最新稳定分支,显著提升渲染效率、JavaScript 执行速度及安全性。
组件 新版本 主要收益
Chromium 142.0.7444.52 支持更多现代 Web API,优化 GPU 渲染管线,修复多个安全漏洞
Node.js 22.20.0 带来性能调优、诊断改进及实验性模块系统增强
V8 引擎 14.2 提升 JS 编译效率,降低内存占用,加快启动与响应速度

这些升级意味着 Electron 应用现在能运行在更接近主流浏览器的环境中,有助于减少兼容性问题,并为未来特性预留支持空间。

行为变更与兼容性提示
部分 API 的调整可能影响现有项目,请注意以下变更:
OffscreenSharedTexture 接口重构:原生纹理句柄的传递方式已统一为标准化 handle 字段。开发者需检查涉及离屏渲染的代码,确保正确接收和管理该句柄资源。

window.open() 弹窗行为规范化:现在通过此方法创建的窗口默认具备可调节尺寸特性,解决了此前在某些平台上弹窗无法拖拽调整大小的问题,符合 HTML 标准预期。

新增功能一览

高精度图像输出支持:新增对 RGBAF16 图像格式的支持,适用于需要高动态范围(HDR)色彩表现的图形处理场景。开发者可在离屏渲染中启用该格式,实现更细腻的视觉效果。

系统内存洞察增强(macOS)
process.getSystemMemoryInfo() 方法在 macOS 上新增两个字段:
fileBacked: 表示由文件映射支撑的内存页数量
purgeable: 可被系统回收以释放压力的内存容量
此信息可用于监控应用资源使用策略,优化内存敏感型任务。

主题色获取(Linux):Linux 平台现支持 systemPreferences.getAccentColor(),返回当前桌面环境的强调色(accent color)。便于应用 UI 与系统主题保持一致,提升整体视觉融合度。

托盘图标状态持久化(macOS):Tray 构造函数新增 guid 选项。设置唯一标识后,即使应用重启,托盘图标的排列位置也将保持不变,改善多实例用户的体验一致性。

跨进程帧引用定位:新增静态方法 webFrameMain.fromFrameToken(processId, frameToken),允许主进程根据渲染进程 ID 和帧令牌精确获取对应的 WebFrameMain 实例,便于高级调试或跨帧通信。

可访问性能力扩展:引入更细粒度的辅助技术接口,包括对屏幕阅读器事件的深度控制、焦点管理增强等,帮助开发者构建符合 WCAG 标准的应用程序。

最近文档查询(Windows & macOS):app.getRecentDocuments() 现已可用,可读取操作系统记录的“最近打开文件”列表,适用于实现“文件 > 打开最近”类功能,无需自行维护历史记录。

USB 设备配置访问:USBDevice 接口暴露 configurations 属性,提供设备所有可用配置描述符的访问能力,便于开发人员进行精细化设备控制与初始化。

文件系统权限持久化:授权状态可在会话生命周期内自动保留。用户首次授予权限后,在同一会话中再次访问相同路径将不再触发确认对话框,提升操作流畅性。

动态导入 ESM 模块(非隔离预加载脚本):即使在未启用上下文隔离的预加载脚本中,也可使用 import() 动态加载 ECMAScript 模块。这为渐进式迁移现代模块化方案提供了便利。

关键缺陷修复
问题类别 修复内容
配色异常 修正 getAccentColor 返回颜色值反转的问题,确保色彩数据准确反映系统设置
DevTools 崩溃 解决 Wayland 显示服务器下独立模式开发者工具闪退问题
会话访问崩溃 修复访问 webContents.session 时潜在的空指针异常
窗口关闭后操作崩溃 杜绝 window.close() 后执行异步回调导致的非法内存访问
命令行参数解析 修复特定特性标志传参引发的启动崩溃
文件选择器稳定性 防止 showOpenDialog 使用空过滤器数组时发生崩溃(Windows)

内部机制调整
资源路径管理革新:内部资源定位机制切换至 DIR_ASSETS 目录规范。同时,app.getPath('assets') 现可返回应用资源根路径,便于集中管理静态资产。
文档体系完善:官方文档已完成本轮更新,涵盖所有新增 API 的使用示例、参数说明与最佳实践,建议开发者查阅最新版 Electron 官方文档 获取权威指导。

建议升级:所有活跃项目应尽快测试并迁移到此版本,尤其是依赖 Node.js 22 或需使用 HDR 渲染、USB 控制等功能的项目。
注意兼容性:请特别关注 OffscreenSharedTexture 和 window.open 的行为变化,必要时调整相关逻辑。

官方主页:https://www.electronjs.org/