构建说明
请遵循以下指南来构建 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
。为此,请打开“控制面板
”→“系统和安全
”→“系统
”→“高级系统设置
”,并添加一个值为 0
的系统变量 DEPOT_TOOLS_WIN_TOOLCHAIN
。这告诉 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 和目标 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
接下来,运行带有 target_cpu="arm64"
的 gn gen
,如上所述。
测试
要运行测试,您首先需要针对作为构建过程一部分构建的 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 同步抱怨 rebase
如果 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/
或其他依赖项的仓库中检出了分支(而不是处于分离头指针状态),也可能发生这种情况。如果遇到这种情况,在相应的仓库中执行 git checkout --detach HEAD
应该可以解决问题。
我被要求输入 chromium-internal.googlesource.com 的用户名/密码
如果在 Windows 上运行 gclient sync
时看到提示要求输入 Username for 'https://chrome-internal.googlesource.com':
,则可能是因为 DEPOT_TOOLS_WIN_TOOLCHAIN
环境变量未设置为 0。打开 控制面板
→ 系统和安全
→ 系统
→ 高级系统设置
并添加一个系统变量 DEPOT_TOOLS_WIN_TOOLCHAIN
,其值为 0
。这会告诉 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 进行检查。