建置說明
請依照以下指南來建置 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 pull
或 git 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/Testing
或 out/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」(也就是 chromium
的 content/
目錄及其相依性,包括 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_cpu
和 target_os
GN 引數。例如,若要從 x64 主機編譯 x86 目標,請在 gn args
中指定 target_cpu = "x86"
。
$ gn gen out/Testing-x86 --args='... target_cpu = "x86"'
並非所有來源和目標 CPU/OS 的組合都受到 Chromium 的支援。
主機 | 目標 | 狀態 |
---|---|---|
Windows x64 | Windows arm64 | 實驗性 |
Windows x64 | Windows x86 | 自動測試 |
Linux x64 | Linux x86 | 自動測試 |
如果您測試其他組合並發現它們可以運作,請更新此文件 :)
如需允許的 target_os
和 target_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 進行檢查。