跳转到主要内容

构建说明

遵循以下指南来构建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 会尝试下载只有 Googler 才能访问的 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,现在需要更新相应文件夹的 origin 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

打包

将 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"'

Chromium 并不支持所有源 CPU/OS 和目标 CPU/OS 的组合。

主机目标状态
Windows x64Windows arm64实验性
Windows x64Windows x86自动测试
Linux x64Linux x86自动测试

如果您测试其他组合并且它们有效,请更新此文档 :)

有关 target_ostarget_cpu 的允许值,请参阅 GN 参考:target_ostarget_cpu

Windows on Arm (实验性)

要为 Windows on Arm 进行交叉编译,请遵循 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 sync 报告 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 会尝试下载只有 Googler 才能访问的 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 进行检查。