Electron是一款开源的跨平台桌面应用开发框架,最初由 GitHub 推出,现由 OpenJS Foundation 联合社区持续维护。它整合了Chromium浏览器内核和Node.js运行环境,让开发者能够直接使用HTML、CSS、JavaScript等前端技术开发Windows、macOS和Linux桌面应用,无需针对不同平台重复开发。
Electron拥有完善的桌面应用开发能力,支持窗口管理、本地文件访问、系统通知、自动更新、崩溃日志收集等功能,能够满足大部分桌面软件的开发需求。同时兼容丰富的Node.js生态资源,开发者可以快速调用各类模块扩展软件功能,提高开发效率。
目前许多知名软件都采用Electron构建,例如Visual Studio Code、Postman、Discord等。对于熟悉Web前端开发的用户来说,Electron能够大幅降低桌面应用开发门槛,是目前较为流行的跨平台开发解决方案之一。
快速入门
Electron提供了丰富的本地(操作系统)的API,使你能够使用纯JavaScript来创建桌面应用程序。与其它各种的Node.js运行时不同的是Electron专注于桌面应用程序而不是Web服务器。
这并不意味着Electron是一个绑定图形用户界面(GUI)的JavaScript库。取而代之的是,Electron使用Web页面作为它的图形界面,所以你也可以将它看作是一个由JavaScript控制的迷你的Chrominum浏览器。
软件特色
1、网络技术
Electron使用Chromium和Node.js,因此您可以使用HTML,CSS和JavaScript构建您的应用程序。
2、跨平台
与Mac,Windows和Linux兼容,Electron应用程序在三个平台上构建和运行。
Electron功能介绍
1、主进程
在Electron里,运行package.json里的main脚本的进程被称为 主进程 ,运行在主进程里的脚本能够通过创建Web页面来显示GUI。
2、渲染进程
因为Electron使用Chrominum来显示Web页面,所以Chrominum的多进程架构也同样被使用。每个页面在Electron里是运行在自己的进程里,这些进程被称为 渲染进程 。
在浏览器里,Web页面通常运行在一个沙盒环境里,它不能访问本地的资源。但在Electron里,在Web页面中通过使用Node.js API可以进行底层的操作系统交互。
3、主进程与渲染进程的不同
主进程通过构造 BrowserWindow 实例来创建Web页面。每个 BrowserWindow 实例在自己的渲染进程里运行Web页面。当一个 BrowserWindow 被销毁后,相应的渲染进程也同样被终止。
主进程管理所有的Web页面以及相关的渲染进程。每个渲染进程都是互相隔离的,并且只知道运行在该进程里的Web页面。
在Web页面里,调用本地GUI是不允许的,因为在Web页面里管理本地GUI资源是非常危险的而且非常容易导致资源泄露。如果你想在Web页面进行GUI操作,该Web页面的渲染进程必须通过和主进程通信来请求主进程处理这些操作。
在Electron里,主进程和渲染进程有很多通信的方法。比如 ipcRanderer 和 ipcMain 模块是用来发送消息的, remote 模块支持RPC风格的通信。
更新日志
v45.0.0-alpha.3版本
- 特征
新增了一个 Windows 错误报告辅助程序(electron_wer.dll已重命名,与_wer.dll可执行文件位于同一位置),用于crashReporter捕获__fastfail绕过 Windows 进程内处理程序的崩溃和其他崩溃事件。
- 修复
app.getPreferredSystemLanguages()修复了在 Windows 系统上调用时出现的内存泄漏问题。
修复了 Windows 系统上潜在的 UAF 问题app.getPreferredSystemLanguages()。
nodeIntegrationInSubFrames修复了在启用和禁用 Meta Pixel的情况下,加载后立即移除 iframe 时渲染器崩溃的问题sandbox,例如在嵌入 Meta Pixel 的页面上。
修复了 macOS 上辅助可执行文件在未指定进程类型的情况下启动时(例如通过禁用 fuse 的方式)会启动第二个应用程序实例的问题child_process.fork();runAsNode现在fork()在这种情况下会抛出异常。
- 其他变化
已弃用同步方法safeStorage.isEncryptionAvailable(),safeStorage.encryptString()并safeStorage.decryptString()改用其他方法。isAsyncEncryptionAvailable()encryptStringAsync()decryptStringAsync()
提升了对 asar 归档文件中的文件fs和操作的性能。
改进了菜单的构建和显示性能。
