Electron 42 来了!桌面开发更稳了

0 阅读5分钟

做桌面开发的,没人不认识 Electron。

VS Code、Notion、Slack、Figma……这些你天天用的工具,底层全是它。但说实话,Electron 的口碑一直挺分裂的——功能强是真的强,安全隐患、内核滞后、安装脚本风险这些槽点也是真的扎心。

就在 5 月 7 日,Electron 团队正式发布了 42 版本

一、内核三连跳:Chromium 148 + Node 24.15 + V8 14.8

Electron 42 直接把三大核心组件拉到最新版:

组件旧版42 版
Chromium146148.0.7778.96
Node.js24.1424.15.0
V814.614.8

Chromium 148 意味着啥?数十个安全漏洞被修复,最新的 Web 标准直接可用,CSS 和 JS 的新特性不用 polyfill 也能跑。Node 24.15 带了更多安全补丁和内存管理优化,V8 14.8 让 JS 执行更快、垃圾回收更狠。

官方原话是:"This release includes upgrades to Chromium 148.0.7778.96, V8 14.8, and Node v24.15.0."

二、最狠的改动:postinstall 脚本,没了

如果说内核升级是"常规操作",那下面这个改动就是史诗级的。

以前的安全隐患

以前你 npm install electron,安装过程中会自动执行 postinstall 脚本,从 GitHub Releases 下载 Electron 的二进制文件。

听起来挺方便对吧?但问题是——postinstall 脚本是 npm 供应链攻击的重灾区。 脚本一旦被篡改,你的开发环境直接沦陷,恶意代码悄无声息就进来了。

Electron 官方博客的原话:

"With recent supply chain security attacks against the npm ecosystem with postinstall scripts as a common attack vector..."

(近年来针对 npm 生态系统的供应链安全攻击中,postinstall 脚本是常见的攻击载体……)

42 版的解法

Electron 42 直接取消 postinstall 自动下载。安装 npm 包时,不再执行任何下载脚本。二进制文件改成首次运行时动态下载——比如你执行 npx electron 的时候,它才会去下载。

更狠的是,官方还新增了一个 install-electron 脚本,你可以手动触发下载:

npm install electron --save-dev --ignore-scripts
npx install-electron

看到 --ignore-scripts 了吗?这意味着你完全可以屏蔽所有脚本执行,Electron 照样能正常工作。

这波改动,直接把供应链攻击的核心入口给焊死了。 对企业级项目、金融、政务这类敏感场景来说,这不是"优化",是"救命"。

三、macOS 通知大换血:不签名就不给用

Electron 42 在 macOS 上干了一件"得罪人"的事——通知 API 强制要求代码签名。

以前用的是老旧的 NSUserNotification,现在换成了苹果官方推荐的 UNNotification API。新 API 要求应用必须代码签名,没签名的应用,通知直接触发 failed 事件,根本不显示。

官方 Breaking Changes 里写得明明白白:

"The new API requires that an application be code-signed in order for notifications to be displayed. If an application is not code-signed, notifications will emit a failed event on the Notification object."

开发者们看到这条估计要骂娘——"我本地调试还得先签名?" 但换个角度想,这恰恰是苹果在逼大家把安全流程做规范。通知权限越来越敏感,不签名就能弹通知,确实太松了。

好消息是,42 版还补了一堆通知相关的实用功能:

  • Notification.getHistory():直接读取通知中心的历史记录
  • idgroupId:自定义通知标识,支持分组展示
  • Windows 端新增 handleActivation 回调:冷启动也能响应通知点击

四、新功能

除了安全和内核,42 版还塞了不少让人眼前一亮的实用功能:

1. WebAuthn Touch ID(macOS)

新增 app.configureWebAuthn(),支持用 Touch ID 做 WebAuthn 认证。

以后你的 Electron 应用可以直接调指纹登录,不用自己折腾原生模块了。

2. 视图动画 + 背景模糊

  • view.setBounds() 支持平滑动画过渡
  • view.setBackgroundBlur() 一键实现系统级毛玻璃效果

以前要实现这些效果,要么写一堆 CSS hack,要么调原生 API。现在一行代码搞定。

3. 全局快捷键可暂停

新增 globalShortcut.setSuspended()isSuspended(),可以临时暂停和恢复快捷键监听。

比如你打开一个输入框,临时屏蔽全局快捷键,避免跟用户输入冲突——这个场景太常见了。

4. 应用状态检测(macOS)

新增 app.isActive(),快速判断应用是不是前台活跃状态。

多窗口场景下,这个 API 能帮你省不少事。

五、升级前必看:这些 Breaking Changes 会坑到你

别急着 npm install,先把这几个坑看清楚:

1. macOS 通知必须签名

前面说了,没签名的应用通知直接失败。本地开发测试时,记得先配置代码签名。

2. 离屏渲染默认缩放变了

以前离屏渲染(OSR)默认用主显示器的 device scale factor,现在改成固定值 1.0

如果你的应用依赖 OSR 截图,升级后输出尺寸可能会变。可以通过 webPreferences.offscreen.deviceScaleFactor 手动指定。

3. 几个被移除/弃用的 API

  • Session.clearStorageDataquotas 参数:已移除(Chromium 上游不再支持)
  • ELECTRON_SKIP_BINARY_DOWNLOAD 环境变量:已移除(因为下载逻辑改了)
  • nativeImage.createFromNamedImage 数组传参:已弃用,要改成对象格式

4. Electron 39 正式停止支持

官方公告:Electron 39.x.y 已达到生命周期终点,不再提供安全更新。

还在用 39 的,赶紧升。

六、怎么升级?三步搞定

# 1. 安装最新版
npm install electron@latest --save-dev

# 2. 如果你特别在意安全,用 --ignore-scripts
npm install electron@latest --save-dev --ignore-scripts
npx install-electron

# 3. 启动验证
npx electron .

官方博客地址:electronjs.org/blog/electr…

GitHub Release Notes:github.com/electron/el…

写在最后

Electron 42 这次更新,没有炫目的新功能,没有花里胡哨的噱头。

但它做了三件开发者最想要的事:内核跟上最新版、postinstall 安全隐患根治、通知和权限流程规范化。

尤其是 postinstall 的改动,表面上看只是"下载时机变了",实际上是在整个 npm 生态的供应链安全上,往前迈了一大步。

做桌面开发的,安全感比什么都重要。 这次 42 版,值得升。

你用 Electron 做过什么项目?升级过程中踩过哪些坑?评论区聊聊~


各位互联网搭子,要是这篇文章成功引起了你的注意,别犹豫,关注、点赞、评论、分享走一波,让我们把这份默契延续下去,一起在前端的海洋里乘风破浪!