跳至主要內容

使用 GN 建構 Electron

·2 分鐘閱讀

Electron 現在使用 GN 來建構自己。以下是關於原因的討論。


GYP 和 GN

當 Electron 在 2013 年首次發佈時,Chromium 的建構組態是使用 GYP 撰寫的,這是「Generate Your Projects」的縮寫。

在 2014 年,Chromium 專案引入了一個名為 GN 的新建構組態工具(這是「Generate Ninja」的縮寫)。Chromium 的建構檔案已遷移至 GN,而 GYP 已從原始程式碼中移除。

Electron 過去一直保持主要的 Electron 程式碼libchromiumcontent 之間的區隔,libchromiumcontent 是 Electron 包裝 Chromium「content」子模組的部分。Electron 一直使用 GYP,而 libchromiumcontent(作為 Chromium 的子集)則在 Chromium 執行時切換至 GN。

就像齒輪沒有完全嚙合一樣,使用兩個建構系統之間存在摩擦。維護相容性容易出錯,編譯器旗標和 #defines 需要在 Chromium、Node、V8 和 Electron 之間仔細保持同步。

為了解決這個問題,Electron 團隊一直致力於將所有內容遷移到 GN。今天,從 Electron 中移除最後的 GYP 程式碼的 commit 已在 master 中完成。

這對您來說意味著什麼

如果您是 Electron 本身的貢獻者,則從 master 或 4.0.0 中簽出和建構 Electron 的過程與 3.0.0 及更早版本中的過程非常不同。有關詳細資訊,請參閱 GN 建構說明

如果您正在使用 Electron 開發應用程式,您可能會在新版 Electron 4.0.0-nightly 中注意到一些微小的變更;但更有可能的是,Electron 的建構系統變更對您來說將是完全透明的。

這對 Electron 來說意味著什麼

GN 比 GYP 更快,而且其檔案更具可讀性和可維護性。此外,我們希望使用單一建構組態系統將減少將 Electron 升級到新版 Chromium 所需的工作量。

  • 它已經大幅幫助了 Electron 4.0.0 的開發,因為 Chromium 67 移除了對 MSVC 的支援,並改為在 Windows 上使用 Clang 建構。使用 GN 建構,我們可以從 Chromium 直接繼承所有編譯器命令,因此我們免費獲得了 Windows 上的 Clang 建構!

  • 它也讓 Electron 更容易在 Electron、Chromium 和 Node 中以統一建構的方式使用 BoringSSL,這在之前是 有問題的