首次提交至 electron/electron
儲存庫的時間是 2013 年 3 月 13 日1。

10 年過去,以及來自 1192 位獨特貢獻者的 27,147 次提交,Electron 已經成為現今最受歡迎的桌面應用程式開發框架之一。這個里程碑是慶祝和反思我們至今的旅程,並分享我們一路走來所學到的經驗的絕佳機會。
如果沒有各位投入時間和努力為專案做出貢獻,我們不會走到今天這一步。雖然程式碼提交永遠是最顯眼的貢獻,我們也必須感謝那些回報錯誤、維護使用者層級模組、提供文件和翻譯,以及參與網路世界 Electron 社群的人們。對我們這些維護者來說,每一項貢獻都非常寶貴。
在我們繼續閱讀這篇部落格文章的其餘部分之前:感謝您。❤️
我們是如何走到這裡的?
Atom Shell 最初是作為 GitHub Atom 編輯器的骨幹而建立,該編輯器於 2014 年 4 月推出公開測試版。它是從頭開始建立的,作為當時可用的基於網頁的桌面框架(node-webkit 和 Chromium Embedded Framework)的替代方案。它有一個殺手級功能:嵌入 Node.js 和 Chromium,為網路技術提供強大的桌面執行階段。
在一年內,Atom Shell 的功能和受歡迎程度開始大幅成長。大型公司、新創公司和個人開發者都開始使用它來建置應用程式(一些早期採用者包括 Slack、GitKraken 和 WebTorrent),而且該專案被恰如其分地更名為 Electron。
從那時起,Electron 就迅速發展且從未停止。以下是我們隨著時間推移的每週下載次數,由 npmtrends.com 提供。

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 版本(發布工作組)
- 升級 Chromium 和 Node.js(升級工作組)
- 監督公開 API 設計(API 工作組)
- 保持 Electron 安全(安全工作組)
- 運行網站、文件和工具(生態系統工作組)
- 社群和企業外展(外展工作組)
- 社群管理(社群和安全工作組)
- 維護我們的建置基礎設施、維護者工具和雲端服務(基礎設施工作組)
在大約我們轉向治理模型的同時,我們也將 Electron 的所有權從 GitHub 轉移到 OpenJS 基金會。儘管最初的核心團隊今天仍然在 Microsoft 工作,但他們只是組成 Electron 治理的較大協作者群體的一部分。2
雖然這種模式並不完美,但它在經歷全球疫情和持續的總體經濟逆風時,對我們來說很合適。展望未來,我們計劃修改治理章程,以指導我們度過 Electron 的第二個十年。
開放原始碼的社群部分很難經營,尤其是當您的外展團隊是一打穿著寫著「社群經理」風衣的工程師時。話雖如此,作為一個大型開放原始碼專案,意味著我們有很多使用者,並且利用他們的能量讓 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 的最低要求!
持續因素驗證
持續因素驗證 (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
Sheriff 是我們編寫的一個開源工具,用於自動管理 GitHub、Slack 和 Google Workspace 的權限。
Sheriff 的主要價值主張是權限管理應該是一個透明的過程。它使用單個 YAML 設定檔來指定所有上述服務的權限。使用 Sheriff,在儲存庫上取得協作者身份或建立新的郵寄清單就像取得 PR 核准並合併一樣容易。
Sheriff 還有一個發布到 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 的最新和最棒的功能保持更新,同時為企業級應用程式維持穩定性和安全性。
我們通常會在即將推出的專案具體化時宣布相關新聞。如果您想隨時掌握未來的版本、功能和一般專案更新,您可以閱讀 我們的部落格 並追蹤我們的社群媒體個人資料 (Twitter 和 Mastodon)!