构建系统概述

优质
小牛编辑
137浏览
2023-12-01

Electron使用gyp进行项目生成,使用ninja进行构建。项目配置可以在 .gyp.gypi文件中找到。

Gyp文件

下面的 gyp文件包含了构建Electron的主要规则:

  • electron.gyp定义了Electron本身是如何构建的。

  • common.gypi调整Node的构建配置,使其与Chromium一起构建。

  • brightray/brightray.gyp定义brightray是如何构建的,并包含与Chromium关联的默认配置。

  • brightray/brightray.gypi包括关于构建的一般构建配置。

组件构建

由于Chromium是一个相当大的项目,最终的连接阶段可能需要几分钟,这使得开发变得困难。
为了解决这个问题,Chromium引入了 组件构建,它将每个组件构建为一个单独的共享库,使得链接非常快,但牺牲了文件大小和性能。
在Electron中,我们采用了一个非常相似的方法:
对于 Debug构建,二进制将链接到共享库版本的Chromium组件,以实现快速链接时间;
对于 Release构建,二进制将链接到静态库版本,所以我们可以有最好的二进制大小和性能。

最小引导

运行引导脚本时,会下载所有Chromium的预构建二进制文件( libchromiumcontent)。默认情况下,将下载静态库和共享库,最终大小应在800MB和2GB之间,具体取决于平台。
默认情况下, libchromiumcontent是从Amazon Web Services下载的。
如果设置了 LIBCHROMIUMCONTENT_MIRROR环境变量,引导脚本将从中下载。
libchromiumcontent-qiniu-mirrorlibchromiumcontent的镜像。
如果您在访问AWS时遇到问题,可以通过 export LIBCHROMIUMCONTENT_MIRROR = http:// 7xk3d2.dl1.z0.glb.clouddn.com /
如果你只想快速构建Electron来进行测试或开发,可以通过传递 --dev参数来下载共享库版本:
1
$ ./script/bootstrap.py --dev
2
$ ./script/build.py -c D
Copied!

双相(Two-Phase)项目生成

ReleaseDebug中,Electron 链接了不同配置的库。 gyp不支持为不同的配置配置不同的链接设置。
要解决这个问题,Electron使用 gyp的变量 libchromiumcontent_component来控制要使用的链接设置,并在运行 gyp时只生成一个目标。

Target名称

与大多数项目使用 ReleaseDebug作为 target名称不同,Electron使用 RD
这是因为 gyp随机崩溃,如果只有一个 ReleaseDebug构建配置被定义,Electron只需要一次生成一个目标,如上所述。
这只会影响开发人员,如果你重新构建了 Electron则不受影响。

相关测试

使用以下方法测试您的更改符合项目编码规范:
1
$ npm run lint
Copied!

测试功能使用:
1
$ npm test
Copied!

每当您对Electron源代码进行更改时,您都需要在测试之前重新运行构建:
1
$ npm run build && npm test
Copied!

您可以通过使用Mocha的独家测试功能隔离您当前正在使用的特定测试或块,使测试套件运行更快。
只需将 .only附加到任何 describeit函数时调用:
1
describe.only('some feature',function(){
2
// ...只有在这个块中的测试才会运行
3
})
Copied!

或者,您可以使用mocha的 grep选项仅运行与给定的正则表达式模式匹配的测试:
1
$ npm test - --grep child_process
Copied!

包含本地模块(例如runas)的测试不能使用调试版本执行(有关详细信息,请参阅#2558),使用发布版本。
要使用发布版本运行测试:
1
$ npm test - -R
Copied!