跳至主要內容

建置說明

請依照以下指南來建置 Electron 本身,以建立自訂的 Electron 二進位檔。若要使用預先建置的 Electron 二進位檔來打包和發佈您的應用程式碼,請參閱應用程式發佈指南。

平台先決條件

在繼續操作之前,請檢查您的平台的建置先決條件

建置工具

Electron 的建置工具自動化了從原始碼編譯 Electron 時的大部分設定,並且可以搭配不同的組態和建置目標。如果您想要手動設定環境,下方列有相關說明。

Electron 使用 GN 進行專案產生,並使用 ninja 進行建置。專案組態可以在 .gn.gni 檔案中找到。

GN 檔案

以下 gn 檔案包含建置 Electron 的主要規則

  • BUILD.gn 定義 Electron 本身的建置方式,並包含與 Chromium 連結的預設組態。
  • build/args/{testing,release,all}.gn 包含建置 Electron 的預設建置引數。

GN 先決條件

您需要安裝 depot_tools,這是用於擷取 Chromium 及其相依性的工具組。

此外,在 Windows 上,您需要設定環境變數 DEPOT_TOOLS_WIN_TOOLCHAIN=0。若要執行此操作,請開啟「控制台」→「系統及安全性」→「系統」→「進階系統設定」,並新增一個名為 DEPOT_TOOLS_WIN_TOOLCHAIN 且值為 0 的系統變數。這會告知 depot_tools 使用您本機安裝的 Visual Studio 版本 (預設情況下,depot_tools 會嘗試下載只有 Google 員工才能存取的 Google 內部版本)。

設定 git 快取

如果您計畫多次簽出 Electron (例如,讓多個平行目錄簽出到不同的分支),使用 git 快取將加快後續對 gclient 的呼叫。若要執行此操作,請設定 GIT_CACHE_PATH 環境變數

$ export GIT_CACHE_PATH="${HOME}/.git_cache"
$ mkdir -p "${GIT_CACHE_PATH}"
# This will use about 16G.

取得程式碼

$ mkdir electron && cd electron
$ gclient config --name "src/electron" --unmanaged https://github.com/electron/electron
$ gclient sync --with_branch_heads --with_tags
# This will take a while, go get a coffee.

您可以改用您自己的 fork,而不是 https://github.com/electron/electron (例如 https://github.com/<username>/electron)。

關於提取/推送的注意事項

如果您打算在未來從官方的 electron 儲存庫執行 git pullgit push,現在您需要更新各自資料夾的原始 URL。

$ cd src/electron
$ git remote remove origin
$ git remote add origin https://github.com/electron/electron
$ git checkout main
$ git branch --set-upstream-to=origin/main
$ cd -

📝 gclient 的運作方式是檢查 src/electron 資料夾內的 DEPS 檔案是否有相依性 (例如 Chromium 或 Node.js)。執行 gclient sync -f 可確保建置 Electron 所需的所有相依性都符合該檔案。

因此,若要提取,您需要執行下列命令

$ cd src/electron
$ git pull
$ gclient sync -f

建置

設定 Chromium 建置工具的環境變數

在 Linux 和 MacOS 上

$ cd src
$ export CHROMIUM_BUILDTOOLS_PATH=`pwd`/buildtools

在 Windows 上

# cmd
$ cd src
$ set CHROMIUM_BUILDTOOLS_PATH=%cd%\buildtools

# PowerShell
$ cd src
$ $env:CHROMIUM_BUILDTOOLS_PATH = "$(Get-Location)\buildtools"

若要產生 Electron 的測試建置組態

在 Linux 和 MacOS 上

$ gn gen out/Testing --args="import(\"//electron/build/args/testing.gn\")"

在 Windows 上

# cmd
$ gn gen out/Testing --args="import(\"//electron/build/args/testing.gn\")"

# PowerShell
gn gen out/Testing --args="import(\`"//electron/build/args/testing.gn\`")"

若要產生 Electron 的發行建置組態

在 Linux 和 MacOS 上

$ gn gen out/Release --args="import(\"//electron/build/args/release.gn\")"

在 Windows 上

# cmd
$ gn gen out/Release --args="import(\"//electron/build/args/release.gn\")"

# PowerShell
$ gn gen out/Release --args="import(\`"//electron/build/args/release.gn\`")"

注意:這會在 src/ 下產生一個 out/Testingout/Release 建置目錄,具體取決於上面傳遞的組態。您可以將 Testing|Release 取代為其他名稱,但它應該是 out 的子目錄。

此外,您不應該需要再次執行 gn gen — 如果您想要變更建置引數,您可以執行 gn args out/Testing 來開啟編輯器。若要查看可用的建置組態選項清單,請執行 gn args out/Testing --list

若要建置,請使用 electron 目標執行 ninja 注意:這也需要一些時間,而且可能會讓您的腿部感到發熱。

對於測試組態

$ ninja -C out/Testing electron

對於發行組態

$ ninja -C out/Release electron

這會建置之前所有的「libchromiumcontent」(也就是 chromiumcontent/ 目錄及其相依性,包括 Blink 和 V8),因此需要一些時間。

建置的可執行檔將位於 ./out/Testing

$ ./out/Testing/Electron.app/Contents/MacOS/Electron
# or, on Windows
$ ./out/Testing/electron.exe
# or, on Linux
$ ./out/Testing/electron

打包

在 Linux 上,先移除除錯和符號資訊

$ electron/script/strip-binaries.py -d out/Release

若要將 Electron 建置打包為可發佈的 zip 檔案

$ ninja -C out/Release electron:electron_dist_zip

交叉編譯

若要針對與您正在建置的平台不同的平台進行編譯,請設定 target_cputarget_os GN 引數。例如,若要從 x64 主機編譯 x86 目標,請在 gn args 中指定 target_cpu = "x86"

$ gn gen out/Testing-x86 --args='... target_cpu = "x86"'

並非所有來源和目標 CPU/OS 的組合都受到 Chromium 的支援。

主機目標狀態
Windows x64Windows arm64實驗性
Windows x64Windows x86自動測試
Linux x64Linux x86自動測試

如果您測試其他組合並發現它們可以運作,請更新此文件 :)

如需允許的 target_ostarget_cpu 值,請參閱 GN 參考資料。

Arm 版 Windows (實驗性)

若要針對 Arm 版 Windows 進行交叉編譯,請依照 Chromium 的指南取得必要的相依性、SDK 和程式庫,然後在執行 gclient sync 之前,使用環境中的 ELECTRON_BUILDING_WOA=1 來建置。

set ELECTRON_BUILDING_WOA=1
gclient sync -f --with_branch_heads --with_tags

或者 (如果使用 PowerShell)

$env:ELECTRON_BUILDING_WOA=1
gclient sync -f --with_branch_heads --with_tags

接下來,如上所述,執行 gn gen,並使用 target_cpu="arm64"

測試

若要執行測試,您首先需要針對建置過程中建置的相同 Node.js 版本建置測試模組。若要產生模組要編譯的建置標頭,請在 src/ 目錄下執行下列命令。

$ ninja -C out/Testing electron:node_headers

您現在可以執行測試

如果您正在除錯某些內容,將一些額外的旗標傳遞給 Electron 二進位檔會很有幫助

$ npm run test -- \
--enable-logging -g 'BrowserWindow module'

在多部電腦之間共用 git 快取

可以透過在 Linux 上將其匯出為 SMB 共用,與其他電腦共用 gclient git 快取,但一次只能有一個處理程序/電腦使用快取。git-cache 腳本建立的鎖定會嘗試防止這種情況,但它可能無法在網路上完美運作。

在 Windows 上,SMBv2 有一個目錄快取,這會導致 git 快取腳本出現問題,因此必須透過設定登錄機碼

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Lanmanworkstation\Parameters\DirectoryCacheLifetime

為 0 來停用它。更多資訊:https://stackoverflow.com/a/9935126

這可以在 powershell 中快速設定 (以管理員身分執行)

New-ItemProperty -Path "HKLM:\System\CurrentControlSet\Services\Lanmanworkstation\Parameters" -Name DirectoryCacheLifetime -Value 0 -PropertyType DWORD -Force

疑難排解

gclient sync 抱怨重新設定基準

如果 gclient sync 被中斷,git 樹狀結構可能會處於不良狀態,導致未來執行 gclient sync 時出現難以理解的訊息。

2> Conflict while rebasing this branch.
2> Fix the conflict and run gclient again.
2> See man git-rebase for details.

如果 src/electron 中沒有 git 衝突或 rebase,您可能需要中止 src 中的 git am

$ cd ../
$ git am --abort
$ cd electron
$ gclient sync -f

如果您在 electron/src/ 或其他依賴項的儲存庫中檢出了分支(而不是處於分離的 HEAD),也可能會發生這種情況。如果是這種情況,在相關儲存庫中執行 git checkout --detach HEAD 應該可以解決問題。

系統要求我輸入 chromium-internal.googlesource.com 的使用者名稱/密碼

如果您在 Windows 上執行 gclient sync 時看到 Username for 'https://chrome-internal.googlesource.com': 的提示,這很可能是因為 DEPOT_TOOLS_WIN_TOOLCHAIN 環境變數未設定為 0。開啟 控制台系統及安全性系統進階系統設定,並新增一個值為 0 的系統變數 DEPOT_TOOLS_WIN_TOOLCHAIN。這會告訴 depot_tools 使用您本機安裝的 Visual Studio 版本(預設情況下,depot_tools 會嘗試下載只有 Google 員工才能存取的 Google 內部版本)。

e 找不到模組

如果執行 npm i -g @electron/build-tools 後仍然無法識別 e,也就是說

Error: Cannot find module '/Users/<user>/.electron_build_tools/src/e'

我們建議透過 nvm 安裝 Node。這可以更輕鬆地管理 Node 版本,並且通常可以解決遺失 e 模組的問題。

RBE 身份驗證隨機失敗,並顯示「Token not valid」

這可能是因為機器上的本機時間稍微偏差所導致。使用 time.is 進行檢查。