跳至主要內容

Electron 24.0.0

·4 分鐘閱讀

Electron 24.0.0 已發布!它包含升級至 Chromium 112.0.5615.49、V8 11.2 和 Node.js 18.14.0。請閱讀以下內容以了解更多詳細資訊!


Electron 團隊很高興宣布 Electron 24.0.0 的發布!您可以透過 npm 使用 npm install electron@latest 安裝,或從我們的發布網站下載。繼續閱讀以了解此版本的詳細資訊。

如果您有任何意見反應,請在 Twitter 上與我們分享,或加入我們的社群Discord!錯誤和功能請求可以在 Electron 的問題追蹤器中回報。

重大變更

堆疊變更

重大變更

API 已變更:nativeImage.createThumbnailFromPath(path, size)

maxSize 參數已變更為 size,以反映傳入的大小將是建立的縮圖大小。先前,如果影像小於 maxSize,Windows 將不會放大影像,而 macOS 將始終將大小設定為 maxSize。現在,所有平台上的行為都相同。

// a 128x128 image.
const imagePath = path.join('path', 'to', 'capybara.png');

// Scaling up a smaller image.
const upSize = { width: 256, height: 256 };
nativeImage.createThumbnailFromPath(imagePath, upSize).then((result) => {
console.log(result.getSize()); // { width: 256, height: 256 }
});

// Scaling down a larger image.
const downSize = { width: 64, height: 64 };
nativeImage.createThumbnailFromPath(imagePath, downSize).then((result) => {
console.log(result.getSize()); // { width: 64, height: 64 }
});

新功能

  • 新增了使用 cookies.get() 篩選 HttpOnly Cookie 的功能。#37365
  • logUsage 新增至 shell.openExternal() 選項,允許將 SEE_MASK_FLAG_LOG_USAGE 旗標傳遞至 Windows 上的 ShellExecuteExSEE_MASK_FLAG_LOG_USAGE 旗標表示使用者啟動的啟動,可啟用頻繁使用程式和其他行為的追蹤。#37291
  • types 新增至 webRequest 篩選器,新增了篩選您接聽的要求的功能。#37427
  • 將新的 devtools-open-url 事件新增至 webContents,以允許開發人員使用它們開啟新視窗。#36774
  • 將數個標準頁面大小選項新增至 webContents.print()#37265
  • enableLocalEcho 旗標新增至工作階段處理常式 ses.setDisplayMediaRequestHandler() 回呼,以允許在 audioWebFrameMain 時,在本機輸出串流中回音遠端音訊輸入。#37528
  • 允許將應用程式特定的使用者名稱傳遞至 inAppPurchase.purchaseProduct()#35902
  • 公開 window.invalidateShadow() 以清除 macOS 上的殘留視覺效果。#32452
  • 現在,預設情況下在 electron 節點標頭組態檔中啟用整個程式最佳化,允許編譯器使用程式中所有模組的資訊執行最佳化,而不是以每個模組 (編譯單元) 為基礎。#36937
  • SystemPreferences::CanPromptTouchID (macOS) 現在支援 Apple Watch。#36935

停止支援 21.x.y

根據專案的支援政策,Electron 21.x.y 已達到停止支援狀態。建議開發人員和應用程式升級至較新版本的 Electron。

告別 Windows 7/8/8.1中所述,Electron 22(Chromium 108)原定的終止支援日期將從 2023 年 5 月 30 日延長至 2023 年 10 月 10 日。Electron 團隊將繼續將此計畫中的任何安全性修復程式回溯移植到 Electron 22,直到 2023 年 10 月 10 日。

E24 (23 年 4 月)E25 (23 年 5 月)E26 (23 年 8 月)
24.x.y25.x.y26.x.y
23.x.y24.x.y25.x.y
22.x.y23.x.y24.x.y
--22.x.y22.x.y

下一步

短期內,您可以預期團隊將繼續專注於跟上構成 Electron 的主要元件(包括 Chromium、Node 和 V8)的開發進度。

您可以在這裡找到 Electron 的公開時程表

關於未來變更的更多資訊,請參閱計畫中的重大變更頁面。

Electron 十周年 🎉

·10 分鐘閱讀

electron/electron 儲存庫的第一個提交是在 2013 年 3 月 13 日1

Initial commit on electron/electron by @aroben

經過 10 年和來自 1192 位獨特貢獻者的 27,147 次以上的提交,Electron 已成為當今構建桌面應用程式最受歡迎的框架之一。這個里程碑是慶祝和反思我們至今為止的旅程,並分享我們一路走來所學到的知識的絕佳機會。

如果沒有每位投入時間和精力為專案做出貢獻的人,我們今天就不會在這裡。儘管原始碼提交始終是最顯著的貢獻,我們也必須感謝那些回報錯誤、維護使用者模組、提供文件和翻譯,以及參與網路空間各處 Electron 社群的人們的努力。作為維護者,每一項貢獻對我們來說都是無價的。

在我們繼續本文的其餘部分之前:感謝您。❤️

我們是如何走到這一步的?

Atom Shell 是作為 GitHub Atom 編輯器的骨幹而建構的,該編輯器於 2014 年 4 月發布公開測試版。它從頭開始建構,作為當時可用的基於 Web 的桌面框架(node-webkit 和 Chromium Embedded Framework)的替代方案。它有一個殺手級功能:嵌入 Node.js 和 Chromium,為 Web 技術提供強大的桌面執行環境。

在一年內,Atom Shell 的功能和普及程度開始大幅成長。大型公司、新創公司和個別開發人員都開始使用它建構應用程式(一些早期採用者包括SlackGitKrakenWebTorrent),並且該專案被恰當地重新命名為 Electron

從那時起,Electron 立即起步並且從未停止。以下是我們隨著時間推移的每週下載次數,由 npmtrends.com 提供。

Electron weekly downloads graph over time

Electron v1 於 2016 年發布,承諾提高 API 穩定性,並改進文件和工具。Electron v2 於 2018 年發布,並引入了語意版本控制,使 Electron 開發人員更容易追蹤發布週期。

到 Electron v6 時,我們轉向與 Chromium 相符的定期 12 週主要版本發布週期。此決策改變了該專案的心態,將「擁有最新版本的 Chromium」從錦上添花轉變為優先事項。這減少了升級之間的技術債務量,使我們更容易保持 Electron 的更新和安全性。

從那時起,我們就像一台運作良好的機器,在每個 Chromium 穩定版本發布的同一天發布新的 Electron 版本。當 Chromium 在 2021 年將發布時程加快到 4 週時,我們能夠聳聳肩,並相應地將我們的發布週期提高到 8 週。

我們現在使用的是 Electron v23(且持續增加),並且仍然致力於為建構跨平台桌面應用程式打造最佳執行環境。即使近年來 JavaScript 開發人員工具蓬勃發展,Electron 仍然是桌面應用程式框架領域中穩定、經過實戰考驗的堅定支持者。如今,Electron 應用程式無處不在:您可以使用 Visual Studio Code 進行程式設計、使用 Figma 進行設計、使用 Slack 進行溝通以及使用 Notion 進行筆記(以及許多其他用途)。我們對此成就感到非常自豪,並感謝所有使之成為可能的人。

我們一路走來學到了什麼?

走向十週年里程碑的道路漫長而曲折。以下是一些幫助我們營運永續的大型開放原始碼專案的關鍵事項。

透過治理模型擴展分散式決策

我們必須克服的一個挑戰是,在 Electron 初次廣為流行後,如何處理專案的長期方向。我們如何處理成為一個由數十名工程師組成的團隊,他們分散在各個公司、國家和時區?

在早期,Electron 的維護者群組依賴非正式協調,這對於較小的專案來說是快速且輕量的,但無法擴展到更廣泛的協作。在 2019 年,我們轉向治理模型,其中不同的工作小組有正式的責任領域。這對於簡化流程和將專案所有權的一部分分配給特定維護者至關重要。如今,每個工作小組 (WG) 負責什麼?

  • 將 Electron 發布推出 (發布 WG)
  • 升級 Chromium 和 Node.js (升級 WG)
  • 監督公開 API 設計 (API WG)
  • 保持 Electron 安全 (安全 WG)
  • 運行網站、文件和工具 (生態系統 WG)
  • 社群和企業推廣 (推廣 WG)
  • 社群審核 (社群與安全 WG)
  • 維護我們的建構基礎設施、維護者工具和雲端服務 (基礎設施 WG)

在我們轉向治理模型的同時,我們也將 Electron 的所有權從 GitHub 轉移到 OpenJS 基金會。儘管原始核心團隊今天仍然在 Microsoft 工作,但他們只是構成 Electron 治理的更大協作者群體的一部分。2

雖然此模型並非完美,但它在疫情全球大流行和持續的總體經濟逆風中一直非常適合我們。展望未來,我們計畫修改治理章程,以引導我們度過 Electron 的第二個十年。

資訊

如果您想了解更多資訊,請查看 electron/governance 儲存庫!

社群

開放原始碼的社群部分很困難,尤其當您的推廣團隊是由十幾名穿著寫著「社群經理」的風衣的工程師組成時。也就是說,作為一個大型開放原始碼專案,意味著我們有很多使用者,而利用他們的能量讓 Electron 來建構使用者生態系統是維持專案健康狀況的關鍵部分。

我們一直在做什麼來發展我們的社群形象?

建構虛擬社群

  • 在 2020 年,我們啟動了我們的社群 Discord 伺服器。我們之前在 Atom 的論壇中設有一個部分,但決定採用更非正式的訊息平台,以便維護者和 Electron 開發人員之間有討論空間,並提供一般除錯協助。
  • 在 2021 年,我們在 @BlackHole1 的協助下建立了 Electron 中國使用者群組。此群組對於 Electron 在中國蓬勃發展的科技界的使用者成長至關重要,為他們提供了一個空間,以便在我們英文空間之外合作處理想法並討論 Electron。我們還要感謝 cnpm 在其 npm 中國鏡像中支持 Electron 每夜發布版本的工作。

參與高知名度的開放原始碼計畫

  • 自 2019 年以來,我們每年都在慶祝Hacktoberfest。Hacktoberfest 是由 DigitalOcean 組織的年度開放原始碼慶祝活動,我們每年都會有數十位熱情的貢獻者希望在開放原始碼軟體中留下他們的足跡。
  • 在 2020 年,我們參與了 Google Season of Docs 的初始迭代,我們與 @bandantonio 合作,重新設計 Electron 的新使用者教學流程。
  • 在 2022 年,我們首次指導 Google Summer of Code 學生。@aryanshridhar 在重構 Electron Fiddle 的核心版本載入邏輯並將其捆綁器遷移到 webpack 方面做了一些很棒的工作。

將所有事物自動化!

如今,Electron 治理約有 30 位活躍的維護者。我們中不到一半是全職貢獻者,這意味著有很多工作要做。我們保持一切順利運轉的訣竅是什麼?我們的座右銘是電腦很便宜,而人類的時間很昂貴。以典型的工程師方式,我們開發了一套自動化的支援工具,讓我們的生活更輕鬆。

不是 Goma

Electron 核心程式碼庫是一個龐大的 C++ 程式碼,而建構時間一直以來限制了我們發布錯誤修復和新功能的速度。在 2020 年,我們部署了 Not Goma,這是 Google Goma 分散式編譯器服務的自訂 Electron 特定後端。Not Goma 處理來自授權使用者機器的編譯請求,並將該程序分散在後端的數百個核心中。它還會快取編譯結果,以便其他編譯相同檔案的人只需下載預先編譯的結果。

自從推出 Not Goma 以來,維護人員的編譯時間已從數小時縮短至數分鐘。穩定的網路連線已成為貢獻者編譯 Electron 的最低要求!

資訊

如果您是開源貢獻者,您也可以嘗試使用 Not Goma 的唯讀快取,該快取預設隨附於 Electron 建置工具

持續性雙重驗證

持續性雙重驗證 (CFA) 是圍繞 npm 的雙重驗證 (2FA) 系統的一層自動化機制,我們將其與 semantic-release 結合使用,以管理我們各種 @electron/ npm 套件的安全且自動化的發布。

雖然 semantic-release 已經自動化了 npm 套件的發布流程,但它需要關閉雙重驗證,或傳遞一個可繞過此限制的秘密權杖。

我們建置 CFA 是為了為任意 CI 作業提供 npm 2FA 的一次性密碼 (TOTP),這讓我們能夠利用 semantic-release 的自動化功能,同時保持雙重驗證的額外安全性。

我們將 CFA 與 Slack 整合前端搭配使用,讓維護人員可以從他們擁有 Slack 的任何裝置驗證套件發布,只要他們手邊有 TOTP 產生器即可。

資訊

如果您想在自己的專案中試用 CFA,請查看 GitHub 儲存庫文件!如果您使用 CircleCI 作為您的 CI 提供者,我們也有 方便的 orb,可快速建立具有 CFA 的專案。

警長

警長 (Sheriff) 是我們編寫的開源工具,用於自動化 GitHub、Slack 和 Google Workspace 的權限管理。

警長的主要價值主張是權限管理應該是一個透明的過程。它使用單一 YAML 設定檔,指定以上列出的所有服務的權限。透過警長,取得儲存庫的協作者身分或建立新的郵寄清單,就像取得 PR 核准並合併一樣容易。

警長還有一個稽核日誌,會發布到 Slack,當 Electron 組織中的任何地方發生可疑活動時,會警告管理員。

…以及我們所有的 GitHub 機器人

GitHub 是一個具有豐富 API 擴充性和名為 Probot 的第一方機器人應用程式框架的平台。為了幫助我們專注於工作中更具創意性的部分,我們建立了一套較小的機器人,幫助我們完成繁瑣的工作。以下是一些範例:

  • Sudowoodo 從頭到尾自動化 Electron 的發布流程,從啟動建置到將發布資產上傳到 GitHub 和 npm。
  • Trop 透過嘗試根據 GitHub PR 標籤將修補程式 cherry-pick 到先前的發布分支,來自動化 Electron 的回溯移植流程。
  • Roller 自動化 Electron 的 Chromium 和 Node.js 相依性的滾動升級。
  • Cation 是我們的 electron/electron PR 的狀態檢查機器人。

總之,我們這個小小的機器人家族為我們帶來了開發人員生產力的巨大提升!

下一步是什麼?

當我們以專案形式進入第二個十年時,您可能會問:Electron 的下一步是什麼?

我們將與 Chromium 的發布節奏保持同步,每 8 週發布 Electron 的新主要版本,讓該框架與 Web 平台和 Node.js 的最新和最棒的內容保持更新,同時保持企業級應用程式的穩定性和安全性。

我們通常會在即將推出的計畫具體化時宣布相關消息。如果您想隨時掌握未來版本、功能和一般專案更新的資訊,您可以閱讀我們的部落格並追蹤我們的社群媒體個人檔案(TwitterMastodon)!

註腳

  1. 這實際上是來自 electron-archive/brightray 專案的第一個提交,該專案在 2017 年被併入 Electron 並合併了其 git 歷程記錄。但誰在乎呢?今天是我們的生日,所以我們可以制定規則!

  2. 與普遍的看法相反,Electron 不再由 GitHub 或 Microsoft 所有,現在是 OpenJS 基金會 的一部分。

Electron 23.0.0

·3 分鐘閱讀

Electron 23.0.0 已發布!它包含 Chromium 110、V8 11.0 和 Node.js 18.12.1 的升級。此外,已不再支援 Windows 7/8/8.1。請閱讀以下內容以了解更多詳細資訊!


Electron 團隊很高興宣布 Electron 23.0.0 的發布!您可以使用 npm 透過 npm install electron@latest 安裝它,或從我們的 發布網站下載它。繼續閱讀以了解有關此版本的詳細資訊。

如果您有任何意見反應,請在 Twitter 上與我們分享,或加入我們的社群Discord!錯誤和功能請求可以在 Electron 的問題追蹤器中回報。

重大變更

堆疊變更

新功能

  • Display 物件新增 label 屬性。 #36933
  • 新增 app.getPreferredSystemLanguages() API 以傳回使用者的系統語言。 #36035
  • 新增對 WebUSB API 的支援。 #36289
  • 新增對 SerialPort.forget() 的支援,以及當給定來源被撤銷時,在 Session 物件上發出的新事件 serial-port-revoked#35310
  • 新增新的 win.setHiddenInMissionControl API,允許開發人員選擇退出 macOS 上的 Mission Control。 #36092

不再支援 Windows 7/8/8.1

Electron 23 不再支援 Windows 7/8/8.1。Electron 遵循計劃的 Chromium 淘汰政策,該政策將在 Chromium 109 中淘汰對 Windows 7/8/8.1 以及 Windows Server 2012 和 2012 R2 的支援(在此處閱讀更多資訊)

重大 API 變更

以下是 Electron 23 中引入的重大變更。您可以在 計劃的重大變更頁面上閱讀有關這些變更和未來變更的更多資訊。

已移除:BrowserWindow scroll-touch-* 事件

已移除 BrowserWindow 上已棄用的 scroll-touch-beginscroll-touch-endscroll-touch-edge 事件。請改用 WebContents 上新提供的 input-event 事件。

// Removed in Electron 23.0
-win.on('scroll-touch-begin', scrollTouchBegin)
-win.on('scroll-touch-edge', scrollTouchEdge)
-win.on('scroll-touch-end', scrollTouchEnd)

// Replace with
+win.webContents.on('input-event', (_, event) => {
+ if (event.type === 'gestureScrollBegin') {
+ scrollTouchBegin()
+ } else if (event.type === 'gestureScrollUpdate') +{
+ scrollTouchEdge()
+ } else if (event.type === 'gestureScrollEnd') {
+ scrollTouchEnd()
+ }
+})

終止對 20.x.y 的支援

根據專案的支援政策,Electron 20.x.y 已達到支援終止。我們鼓勵開發人員和應用程式升級到較新版本的 Electron。

E22 (2022 年 11 月)E23 (2023 年 2 月)E24 (23 年 4 月)E25 (23 年 5 月)E26 (23 年 8 月)
22.x.y23.x.y24.x.y25.x.y26.x.y
21.x.y22.x.y23.x.y24.x.y25.x.y
20.x.y21.x.y22.x.y23.x.y24.x.y

下一步

短期內,您可以預期團隊將繼續專注於跟上構成 Electron 的主要元件(包括 Chromium、Node 和 V8)的開發進度。

您可以在這裡找到 Electron 的公開時程表

關於未來變更的更多資訊,請參閱計畫中的重大變更頁面。

Electron 22.0.0

·5 分鐘閱讀

Electron 22.0.0 已發布!它包含新的公用程式程序 API、Windows 7/8/8.1 支援的更新,以及 Chromium 108、V8 10.8 和 Node.js 16.17.1 的升級。請閱讀以下內容以了解更多詳細資訊!


Electron 團隊很高興宣布 Electron 22.0.0 的發布!您可以使用 npm 透過 npm install electron@latest 安裝它,或從我們的 發布網站下載它。繼續閱讀以了解有關此版本的詳細資訊。

如果您有任何意見反應,請在 Twitter 上與我們分享,或加入我們的社群Discord!錯誤和功能請求可以在 Electron 的問題追蹤器中回報。

重大變更

堆疊變更

重點功能

UtilityProcess API #36089

新的 UtilityProcess 主程序模組允許創建一個輕量級的 Chromium 子進程,僅具有 Node.js 集成,同時允許使用 MessageChannel 與沙盒化的渲染器進行通信。該 API 的設計基於 Node.js 的 child_process.fork,以便更容易轉換,主要區別在於入口點 modulePath 必須來自打包應用程式內部,以僅允許加載受信任的腳本。此外,該模組預設禁止與渲染器建立通信通道,維護主進程是應用程式中唯一受信任進程的合約。

您可以在我們的文檔中閱讀更多關於新的 UtilityProcess API 的資訊

Windows 7/8/8.1 支援更新

資訊

2023/02/16:關於 Windows Server 2012 支援的更新

上個月,Google 宣布 Chrome 109 將繼續接收 Windows Server 2012 和 Windows Server 2012 R2 的重要安全性修復,直到 2023 年 10 月 10 日。因此,Electron 22 (Chromium 108) 計劃的終止支援日期將從 2023 年 5 月 30 日延長至 2023 年 10 月 10 日。Electron 團隊將繼續將此計畫中的任何安全修復向後移植到 Electron 22,直到 2023 年 10 月 10 日。

請注意,我們不會為 Windows 7/8/8.1 提供額外的安全修復。此外,如先前宣布,Electron 23 (Chromium 110) 將僅在 Windows 10 及以上版本上運作。

Electron 22 將是最後一個支援 Windows 7/8/8.1 的 Electron 主要版本。Electron 遵循 Chromium 計劃的淘汰政策,該政策將在 Chromium 109 中淘汰 Windows 7/8/8.1 支援 (在此處閱讀更多資訊)

Windows 7/8/8.1 將不支援 Electron 23 及以後的主要版本。

其他重點變更

  • 在 Linux 和 Windows 上新增了對 Web Bluetooth PIN 配對的支援。#35416
  • 新增了 LoadBrowserProcessSpecificV8Snapshot 作為一個新的熔斷器,它將讓主/瀏覽器進程從 browser_v8_context_snapshot.bin 檔案加載其 v8 快照。任何其他進程都將使用與今天相同的路徑。#35266
  • 新增了 WebContents.opener 以存取視窗開啟器,以及 webContents.fromFrame(frame) 以取得對應於 WebFrameMain 實例的 WebContents。#35140
  • 透過新的會話處理程序 ses.setDisplayMediaRequestHandler 新增了對 navigator.mediaDevices.getDisplayMedia 的支援。#30702

重大 API 變更

以下是在 Electron 22 中引入的重大變更。您可以在 計劃的重大變更頁面閱讀更多關於這些變更和未來變更的資訊。

已棄用:webContents.incrementCapturerCount(stayHidden, stayAwake)

webContents.incrementCapturerCount(stayHidden, stayAwake) 已被棄用。現在當頁面擷取完成時,它會由 webContents.capturePage 自動處理。

const w = new BrowserWindow({ show: false })

- w.webContents.incrementCapturerCount()
- w.capturePage().then(image => {
- console.log(image.toDataURL())
- w.webContents.decrementCapturerCount()
- })

+ w.capturePage().then(image => {
+ console.log(image.toDataURL())
+ })

已棄用:webContents.decrementCapturerCount(stayHidden, stayAwake)

webContents.decrementCapturerCount(stayHidden, stayAwake) 已被棄用。現在當頁面擷取完成時,它會由 webContents.capturePage 自動處理。

const w = new BrowserWindow({ show: false })

- w.webContents.incrementCapturerCount()
- w.capturePage().then(image => {
- console.log(image.toDataURL())
- w.webContents.decrementCapturerCount()
- })

+ w.capturePage().then(image => {
+ console.log(image.toDataURL())
+ })

已移除:WebContents new-window 事件

WebContents 的 new-window 事件已移除。它已由 webContents.setWindowOpenHandler() 取代。

- webContents.on('new-window', (event) => {
- event.preventDefault()
- })

+ webContents.setWindowOpenHandler((details) => {
+ return { action: 'deny' }
+ })

已棄用:BrowserWindow scroll-touch-* 事件

BrowserWindow 上的 scroll-touch-beginscroll-touch-endscroll-touch-edge 事件已棄用。請改用 WebContents 上新提供的 input-event 事件

// Deprecated
- win.on('scroll-touch-begin', scrollTouchBegin)
- win.on('scroll-touch-edge', scrollTouchEdge)
- win.on('scroll-touch-end', scrollTouchEnd)

// Replace with
+ win.webContents.on('input-event', (_, event) => {
+ if (event.type === 'gestureScrollBegin') {
+ scrollTouchBegin()
+ } else if (event.type === 'gestureScrollUpdate') {
+ scrollTouchEdge()
+ } else if (event.type === 'gestureScrollEnd') {
+ scrollTouchEnd()
+ }
+ })

終止對 19.x.y 的支援

根據專案的支援政策,Electron 19.x.y 已達到終止支援。鼓勵開發人員和應用程式升級到較新版本的 Electron。

E19 (2022 年 5 月)E20 (2022 年 8 月)E21 (2022 年 9 月)E22 (2022 年 11 月)E23 (2023 年 1 月)
19.x.y20.x.y21.x.y22.x.y23.x.y
18.x.y19.x.y20.x.y21.x.y22.x.y
17.x.y18.x.y19.x.y20.x.y21.x.y

下一步

Electron 專案將於 2022 年 12 月暫停,並於 2023 年 1 月恢復。更多資訊可以在12 月關閉部落格文章中找到。

短期內,您可以預期團隊將繼續專注於跟上構成 Electron 的主要元件(包括 Chromium、Node 和 V8)的開發進度。

您可以在這裡找到 Electron 的公開時程表

關於未來變更的更多資訊,請參閱計畫中的重大變更頁面。

告別 Windows 7/8/8.1

·3 分鐘閱讀

Electron 將從 Electron 23 開始終止對 Windows 7、Windows 8 和 Windows 8.1 的支援。


根據 Chromium 的淘汰政策,Electron 將從 Electron 23 開始終止對 Windows 7、Windows 8 和 Windows 8.1 的支援。這與 Microsoft 於 2023 年 1 月 10 日終止對 Windows 7 ESUWindows 8.1 延伸的支援一致。

Electron 22 將是最後一個支援 Windows 10 之前版本的 Electron 主要版本。Windows 7/8/8.1 將不支援 Electron 23 及以後的主要版本。舊版本的 Electron 將繼續在 Windows 7 上運作,我們將繼續發布 Electron 22.x 系列的修補程式,直到 2023 年 5 月 30 日,屆時 Electron 將終止對 22.x 的支援(根據我們的支援時間表)。

為何要淘汰?

Electron 遵循 Chromium 計劃的淘汰政策,該政策將在 Chromium 109 中淘汰支援 (在此處閱讀更多關於 Chromium 時間表的資訊)。Electron 23 將包含 Chromium 110,該版本將不支援舊版本的 Windows。

因此,包含 Chromium 108 的 Electron 22 將是最後一個支援的版本。

淘汰時間表

以下是我們計劃的淘汰時間表

  • 2022 年 12 月:Electron 團隊將進入假期休息期
  • 2023 年 1 月:所有支援的發佈分支都會接受與 Windows 7 和 8 相關的問題。
  • 2023 年 2 月 7 日:Electron 23 發布。
  • 2023 年 2 月 8 日 - 2023 年 5 月 29 日:Electron 將繼續接受對舊於 Electron 23 的支援版本的修復。
  • 2023 年 5 月 30 日:Electron 22 達到其支援週期的終止。

這對開發人員意味著什麼

  • Electron 團隊將接受與 Windows 7/8/8.1 相關的問題和修復,直到每個版本達到其支援週期的終止。
    • 這特別適用於 Electron 22、Electron 21 和 Electron 20。
  • 對於舊於 Electron 23 的 Electron 版本,將會接受與 Windows 7/8/8.1 相關的新問題。
    • 對於任何較新的發佈版本,將不接受新的問題。
  • 一旦 Electron 22 達到其支援週期的終止,所有與 Windows 7/8/8.1 相關的現有問題都將被關閉。
資訊

2023/02/16:關於 Windows Server 2012 支援的更新

上個月,Google 宣布 Chrome 109 將繼續接收 Windows Server 2012 和 Windows Server 2012 R2 的重要安全性修復,直到 2023 年 10 月 10 日。因此,Electron 22 (Chromium 108) 計劃的終止支援日期將從 2023 年 5 月 30 日延長至 2023 年 10 月 10 日。Electron 團隊將繼續將此計畫中的任何安全修復向後移植到 Electron 22,直到 2023 年 10 月 10 日。

請注意,我們不會為 Windows 7/8/8.1 提供額外的安全修復。此外,如先前宣布,Electron 23 (Chromium 110) 將僅在 Windows 10 及以上版本上運作。

下一步

如果您有任何問題或疑慮,請隨時寫信給我們 info@electronjs.org。您也可以在我們的官方 Electron Discord 中找到社群支援。

寂靜之地 II (2022 年 12 月)

·一分鐘閱讀

Electron 專案將於 2022 年 12 月暫停,然後於 2023 年 1 月恢復全速運作。

透過 GIPHY


12 月將保持不變的事項

  1. 必要時將發布零日和其他主要的安全性相關版本。安全事件應透過 SECURITY.md 進行報告。
  2. 行為準則報告和管理將繼續進行。

12 月將有變化的事項

  1. 12 月將不會發布新的穩定版本。12 月的最後兩週將不會發布夜間版和 Alpha 版本。
  2. 除了少數例外,不審核或合併任何 Pull Request。
  3. 任何儲存庫皆不更新 Issue Tracker。
  4. 維護者不會在 Discord 上提供除錯協助。
  5. 不更新社群媒體內容。

為什麼會這樣?

繼 2021 年 12 月靜默月的成功,我們希望在 2022 年再次舉辦。12 月仍然是大多數公司的靜默期,因此我們希望讓維護者有機會充電。大家都期待 2023 年,我們也期待美好的事物發生!我們鼓勵其他專案也考慮類似的措施。

介紹 Electron Forge 6

·6 分鐘閱讀

我們很高興宣布 Electron Forge v6.0.0 現已推出!此版本標誌著自 2018 年以來 Forge 的首次重大版本發布,並將專案從 electron-userland 移至 Github 上的主要 electron 組織。

繼續閱讀以了解新功能以及您的應用程式如何採用 Electron Forge!

什麼是 Electron Forge?

Electron Forge 是一個用於封裝和發布 Electron 應用程式的工具。它將 Electron 的建置工具生態系統整合到單一的可擴充介面中,以便任何人都可以立即投入製作 Electron 應用程式。

主要功能包括:

  • 📦 應用程式封裝和程式碼簽署
  • 🚚 Windows、macOS 和 Linux 上可自訂的安裝程式(DMG、deb、MSI、PKG、AppX 等)
  • ☁️ 適用於雲端供應商的自動發布流程(GitHub、S3、Bitbucket 等)
  • ⚡️ 適用於 webpack 和 TypeScript 的易於使用的樣板範本
  • ⚙️ 原生 Node.js 模組支援
  • 🔌 可擴充的 JavaScript 外掛程式 API
延伸閱讀

請瀏覽「為什麼選擇 Electron Forge」說明文件,以深入了解 Forge 的理念和架構。

v6 的新功能?

完全重寫

從 v1 到 v5,Electron Forge 基於現已終止的 electron-compile 專案。Forge 6 是該專案的完全重寫版本,具有新的模組化架構,可以擴充以滿足任何 Electron 應用程式的需求。

在過去幾年中,Forge v6.0.0-beta 已實現與 v5 的功能對等,且程式碼變動已大幅減緩,使該工具可以普遍採用。

請勿安裝錯誤的套件

對於 5 版及更低版本,Electron Forge 發布在 npm 上的 electron-forge 套件中。從 v6 重寫開始,Forge 改為以具有許多較小專案的單一儲存庫專案的方式組織。

官方支援

過去,Electron 維護者對建置工具沒有任何意見,將此任務留給各種社群套件。然而,隨著 Electron 作為一個專案的成熟,新的 Electron 開發人員越來越難以理解他們需要哪些工具來建置和發布他們的應用程式。

為了引導 Electron 開發人員進行發布流程,我們決定將 Forge 作為 Electron 的官方內建建置管道

在過去的一年中,我們一直在緩慢地將 Forge 整合到官方 Electron 文件中,並且最近已將 Forge 從其在 electron-userland/electron-forge 中的舊址移至 electron/forge 儲存庫。現在,我們終於準備好向廣大用戶發布 Electron Forge!

開始使用

初始化新的 Forge 專案

可以使用 create-electron-app CLI 指令碼來搭建新的 Electron Forge 專案。

yarn create electron-app my-app --template=webpack
cd my-app
yarn start

該指令碼將在 my-app 資料夾中建立一個 Electron 專案,其中包含完整的 JavaScript 打包和預先設定的建置管道。

如需更多資訊,請參閱 Forge 文件中的「開始使用」指南。

一流的 webpack 支援

上面的程式碼片段使用 Forge 的Webpack 範本,我們建議將其作為新 Electron 專案的起點。此範本是圍繞 @electron-forge/plugin-webpack 外掛程式構建的,該外掛程式以多種方式將 webpack 與 Electron Forge 整合,包括:

  • 使用 webpack-dev-server 增強本地開發流程,包括在渲染器中支援 HMR;
  • 在應用程式封裝之前處理 webpack 套件的建置邏輯;以及
  • 在 webpack 打包過程中新增對原生 Node 模組的支援。

如果您需要 TypeScript 支援,請考慮改用「Webpack + TypeScript 範本」

匯入現有的專案

Electron Forge CLI 也包含用於匯入現有 Electron 專案的匯入命令。

cd my-app
yarn add --dev @electron-forge/cli
yarn electron-forge import

當您使用 import 命令時,Electron Forge 將新增一些核心相依性和建立新的 forge.config.js 設定。如果您有任何現有的建置工具(例如 Electron Packager、Electron Builder 或 Forge 5),它會嘗試盡可能多地遷移設定。您的一些現有設定可能需要手動遷移。

手動遷移詳細資訊可在 Forge 匯入文件中找到。如果您需要協助,請造訪我們的 Discord 伺服器

為什麼要改用 Forge?

如果您已經有用於封裝和發布您的 Electron 應用程式的工具,採用 Electron Forge 的相關優點仍然可能超過初始轉換成本。

我們認為使用 Forge 有兩個主要好處:

  1. 一旦 Electron 支援,Forge 便會立即收到應用程式建置的新功能。在這種情況下,您無需自行加入新的工具支援,或等待其他套件最終實作該支援才能升級。有關近期範例,請參閱macOS 通用二進位檔ASAR 完整性檢查

  2. Forge 的多套件架構使其易於理解和擴充。由於 Forge 由許多責任明確的較小套件組成,因此更容易追蹤程式碼流程。此外,Forge 的可擴充 API 設計表示您可以編寫自己的額外建置邏輯,與為進階使用案例提供的設定選項分開。如需有關編寫自訂 Forge 外掛程式、製作程式和發布程式的更多詳細資訊,請參閱文件中的「擴充 Electron Forge」一節。

重大變更

Forge 6 在測試階段經歷了很長一段時間,其發布頻率逐漸減慢。然而,我們在 2022 年下半年加快了開發速度,並使用最後幾個版本在 v6.0.0 穩定版本發布之前推動了一些最終的重大變更。

如果您是 Electron Forge 6 測試使用者,請參閱v6.0.0 GitHub 版本說明,其中列出了最近測試版本 (>=6.0.0-beta.65) 中所做的重大變更。

完整的變更和提交清單可以在儲存庫的CHANGELOG.md中找到。

提交您的意見回饋!

告訴我們您需要什麼!Electron Forge 團隊一直在努力建構專案,以更好地滿足其使用者。

您可以透過提交功能要求、發布問題或只是讓我們知道您的意見回饋,來幫助我們改進 Electron Forge!您也可以加入官方 Electron Discord 伺服器,其中有專門用於討論 Electron Forge 的頻道。

如果您想針對 https://electronforge.dev.org.tw 上的 Forge 文件提供任何意見回饋,我們有一個與 electron-forge/electron-forge-docs 儲存庫同步的 GitBook 執行個體。

2022 年維護者高峰會回顧

·5 分鐘閱讀

上個月,Electron 的維護者團隊在加拿大溫哥華聚會,討論該專案 2023 年及以後的發展方向。在會議室裡的四天,核心維護者和受邀的協作者討論了新計畫、維護痛點和專案的整體健康狀況。

團體合照!由 @groundwater 拍攝。

展望未來,團隊仍將全力投入於發布定期和快速的 Chromium 升級、修復錯誤,並讓 Electron 對所有人來說更加安全和高效能。我們還有一些正在進行中的令人興奮的專案,很樂意與社群分享!

轉型的全新 API

Electron 專案中需要共識的主要 API 提案,會經過徵求意見 (Request for Comments,RFC) 的流程,由我們的 API 工作組成員審查。

今年,我們推動了兩項主要提案,這些提案有可能為 Electron 應用程式開啟新的功能維度。這些提案都具有高度實驗性,但這裡先預覽一下未來會有的功能!

新的原生附加元件增強功能 (C API)

此提案概述了新的 Electron C API 層,允許應用程式開發人員編寫自己的原生 Node 附加元件,這些附加元件可與 Electron 的內部資源互動,類似於 Node 自己的 Node-API。有關擬議新 API 的更多資訊可以在這裡找到

範例:使用 Chromium 資源為應用程式增壓

許多 Electron 應用程式都維護自己的分支,以便直接與 Chromium 內部元件互動,這些元件原本是無法使用原始 (未修改) 的 Electron 存取的。藉由在 C API 層中公開這些資源,此程式碼可以改為作為原生模組與 Electron 並存,從而可能減少應用程式開發人員的維護負擔。

公開 Chromium 的 UI 層 (Views API)

在底層,Chrome 使用者介面 (UI) 的非網站部分,例如工具列、索引標籤或按鈕,都是使用一個稱為 Views 的框架建構的。Views API 提案將此框架的部分元件以 JavaScript 類別的形式引入 Electron,最終目標是允許開發人員為他們的 Electron 應用程式建立非網頁 UI 元素。這將避免應用程式必須拼湊網頁內容。

實現這組新 API 的基礎工作目前正在進行中。以下是一些您可以在不久的將來預期會看到的首批項目。

範例:使用 WebContentsView 重構視窗模型

我們計畫的第一個變更是將 Chrome 的 WebContentsView 公開到 Electron 的 API 介面,這將取代我們現有的 BrowserView API (雖然名稱如此,但它是與 Chromium Views 無關的 Electron 特定程式碼)。在公開 WebContentsView 後,我們將擁有一個可重複使用的 View 物件,可以顯示網頁內容,為使 BrowserWindow 類別成為純 JavaScript 並消除更多程式碼複雜性開啟大門。

儘管此變更並未為應用程式開發人員提供許多新功能,但它是一個大型重構,可以消除底層的許多程式碼,簡化 Chromium 升級並降低主要版本之間出現新錯誤的風險。

如果您是應用程式中使用 BrowserView 的 Electron 開發人員:請別擔心,我們沒有忘記您!我們計劃使現有的 BrowserView 類別成為 WebContentsView 的墊片,在您轉換到較新的 API 時提供緩衝。

請參閱:electron/electron#35658

範例:具有 ScrollView 的可捲動網頁內容

我們在 Stack 的朋友們一直在推動一項計畫,將 Chromium ScrollView 元件公開到 Electron 的 API。有了這個新的 API,任何子 View 元件都可以水平或垂直捲動。

儘管這個新的 API 僅實現了一個較小的功能,但團隊的最終目標是建構一組實用 View 元件,可以用作工具組來建構更複雜的非 HTML 介面。

參與方式

您是對這兩個 API 提案感興趣的 Electron 應用程式開發人員嗎?雖然我們還沒準備好接收額外的 RFC,請隨時關注未來更多詳細資訊!

Electron Forge v6 穩定版發布

自該框架問世以來,Electron 的建置工具生態系統基本上是由社群驅動的,並且包含許多小型、單一用途的套件 (例如 electron-winstaller、electron-packager、electron-notarize、electron-osx-sign)。儘管這些工具運作良好,但使用者要將可運作的建置流程拼湊起來是令人卻步的。

為了幫助 Electron 開發人員建立更友善的體驗,我們建構了 Electron Forge,這是一個將所有現有工具合併到單一介面的 All-in-One 解決方案。雖然 Forge 自 2017 年以來一直在開發中,但該專案在過去幾年一直處於休眠狀態。然而,鑑於社群對 Electron 建置工具狀態的回饋,我們一直在努力發布下一代 Forge 的穩定主要版本。

Electron Forge 6 具有一流的 TypeScript 和 Webpack 支援,以及一個可擴展的 API,允許開發人員建立自己的外掛程式和安裝程式。

請隨時關注:公告即將發布

如果您有興趣使用 Forge 建置專案,或是使用 Forge 可擴展的第三方 API 建置範本或外掛程式,請隨時關注我們在本月稍後發布的 Forge v6 穩定版正式公告!

下一步是什麼?

除了以上內容,團隊一直在考慮許多探索性專案,以讓 Electron 應用程式開發人員和終端使用者獲得更好的體驗。更新工具、API 審查流程和增強文件是我們正在試驗的其他項目。我們希望在不久的將來分享更多消息!

Electron 21.0.0

·3 分鐘閱讀

Electron 21.0.0 已發布!它包含升級到 Chromium 106、V8 10.6 和 Node.js 16.16.0。請閱讀以下內容以了解更多詳細資訊!


Electron 團隊很高興宣布 Electron 21.0.0 的發布!您可以透過 npm 使用 npm install electron@latest 安裝它,或從我們的發布網站下載它。繼續閱讀以了解有關此版本的詳細資訊。

如果您有任何意見反應,請在 Twitter 上與我們分享,或加入我們的社群Discord!錯誤和功能請求可以在 Electron 的問題追蹤器中回報。

重大變更

堆疊變更

新功能

  • 新增 webFrameMain.origin#35534
  • 新增 WebContents.ipcWebFrameMain.ipc API。#35231
  • 新增對面板式行為的支援。視窗可以浮在全螢幕應用程式上方。#34388
  • 新增對 macOS 應用程式 APNs 推播通知的支援。#33574

重大變更和 API 變更

以下是 Electron 21 中引入的重大變更。

啟用 V8 記憶體保護機制

Electron 21 啟用了V8 沙箱指標,遵循 Chrome 在 Chrome 103 中採取相同做法的決定。這對原生模組有一些影響。此功能具有效能和安全性優勢,但也對原生模組施加了一些新的限制,例如使用指向外部 ("堆外") 記憶體的 ArrayBuffer。請參閱這篇部落格文章以了解更多資訊。#34724

重構 webContents.printToPDF

重構 webContents.printToPDF 以與 Chromium 的無頭實作保持一致。請參閱#33654 以了解更多資訊。

有關這些變更和未來變更的更多資訊,請參閱計畫中的重大變更頁面。

18.x.y 版本終止支援

根據專案的支援原則,Electron 18.x.y 已終止支援。建議開發人員和應用程式升級到較新版本的 Electron。

E18 (2022 年 3 月)E19 (2022 年 5 月)E20 (2022 年 8 月)E21 (2022 年 9 月)E22 (2022 年 12 月)
18.x.y19.x.y20.x.y21.x.y22.x.y
17.x.y18.x.y19.x.y20.x.y21.x.y
16.x.y17.x.y18.x.y19.x.y20.x.y

下一步

短期內,您可以預期團隊將繼續專注於跟上構成 Electron 的主要元件(包括 Chromium、Node 和 V8)的開發進度。

您可以在這裡找到 Electron 的公開時程表

關於未來變更的更多資訊,請參閱計畫中的重大變更頁面。

Electron 20.0.0

·4 分鐘閱讀

Electron 20.0.0 已發布!它包含升級到 Chromium 104、V8 10.4 和 Node.js 16.15.0。請閱讀以下內容以了解更多詳細資訊!


Electron 團隊很高興宣布 Electron 20.0.0 的發布!您可以透過 npm 使用 npm install electron@latest 安裝它,或從我們的發布網站下載它。繼續閱讀以了解有關此版本的詳細資訊,並請分享您的任何意見!

重大變更

新功能

  • 在 Windows 上新增沉浸式深色模式。#34549
  • 新增對面板式行為的支援。視窗可以浮在全螢幕應用程式上方。#34665
  • 更新 Windows 控制覆蓋按鈕,使其在 Windows 11 上看起來和感覺更像原生按鈕。#34888
  • 除非指定 nodeIntegration: truesandbox: false,否則轉譯器現在預設為沙箱化。#35125
  • 在使用 nan 建置原生模組時新增保護措施。#35160

堆疊變更

重大變更和 API 變更

以下是 Electron 20 中引入的重大變更。有關這些變更以及未來變更的更多資訊,請參閱計劃中的重大變更頁面。

預設變更:沒有 nodeIntegration: true 的渲染器預設會被沙箱化

先前,指定了預載腳本的渲染器預設為未沙箱化。這表示預設情況下,預載腳本可以存取 Node.js。在 Electron 20 中,此預設值已變更。從 Electron 20 開始,渲染器預設會被沙箱化,除非指定了 nodeIntegration: truesandbox: false

如果您的預載腳本不依賴 Node,則無需執行任何動作。如果您的預載腳本確實依賴 Node,則可以重構它們以從渲染器中移除 Node 的使用,或者為相關的渲染器明確指定 sandbox: false

已修正:nan 原生模組中的自發性崩潰

在 Electron 20 中,我們變更了與原生模組相關的兩個項目

  1. V8 標頭現在預設使用 c++17。此標誌已新增至 electron-rebuild。
  2. 我們修正了一個遺失的 include 會導致依賴 nan 的原生模組中出現自發性崩潰的問題。

為了獲得最佳穩定性,我們建議在重建原生模組時,尤其是依賴 nan 的模組時,使用 node-gyp >=8.4.0 和 electron-rebuild >=3.2.9。有關更多資訊,請參閱 electron #35160 和 node-gyp #2497

已移除:Linux 上的 .skipTaskbar

在 X11 上,skipTaskbar 會將 _NET_WM_STATE_SKIP_TASKBAR 訊息傳送至 X11 視窗管理員。Wayland 沒有直接的對應項目,而已知解決方法具有無法接受的權衡 (例如,GNOME 中的 Window.is_skip_taskbar 需要不安全模式),因此 Electron 無法在 Linux 上支援此功能。

終止對 17.x.y 的支援

根據專案的支援政策,Electron 17.x.y 已終止支援。我們鼓勵開發人員和應用程式升級至較新版本的 Electron。

E18 (2022 年 3 月)E19 (2022 年 5 月)E20 (2022 年 8 月)E21 (2022 年 9 月)E22 (2022 年 12 月)
18.x.y19.x.y20.x.y21.x.y22.x.y
17.x.y18.x.y19.x.y20.x.y21.x.y
16.x.y17.x.y18.x.y19.x.y20.x.y
15.x.y--------

下一步

短期內,您可以預期團隊將繼續專注於跟上構成 Electron 的主要元件(包括 Chromium、Node 和 V8)的開發。儘管我們謹慎不對發布日期做出承諾,但我們的計畫是每 2 個月左右發布帶有這些元件新版本的 Electron 主要版本。

您可以在這裡找到 Electron 的公開時程表

關於未來變更的更多資訊,請參閱計畫中的重大變更頁面。