跳到主要内容

构建说明

请遵循以下指南来构建 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 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 和目标 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

接下来,运行带有 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 进行检查。