windows electron-4.0.5编译指南

windows electron-4.0.5编译指南

前言

最近项目中用到electron,但是electron占用磁盘空间太大,所以想对electron做一波精简,但是做精简的前提是自己编译electron。

发现网上能找到的相关文章基本过时,官方编译指南对于没有掌握一定的google系构建系统知识的人来说过于简单。
所以将我在此次编译过程中遇到的问题与过程记录下来,希望能对有需要的人提供帮助

准备

这次编译的electron版本是4.0.5,编译之前需要做以下准备

  • 翻墙,国内虽然不墙github了,但是还是强google,electron的编译需要拉取大量goglesource上的资源,因为太过繁多并且没有统一的配置的地方,所以提前下载好基本是不可能的。所以一定要翻墙。

  • 保守估计60G磁盘,这个没的说,不过如果有人已经拉过了所有代码仓库,那么你可以去借别人的仓库(这点后面会细说),能够省掉大约20G的空间,并且节省大幅的下载时间,不过翻墙还是要的,因为中间要下载很多的临时脚本

  • vs2017c++开发环境,这个是构建脚本里面写死的,其他版本哪怕更高的都不行。注意必须安装ide(社区版、专业版、企业版都可以),只安装msbuild和构建工具是不行的

  • windowsSDK-10.0.17134.0(或以上),注意要安装完整版的,不能在安装vs的时候顺便勾选windowsSDK来安装,我当时被这个问题坑的很深。

必须去微软官网下载单独的windowsSDK的镜像安装,而且安装镜像的时候必须勾选Debug Tools。也就是安装完之后windowsSDK安装目录下需要拥有Debuggers目录。

  • python2.7.15,需要python2.7运行环境还有pip,注意版本,python2.7.0是不行的,具体多少不太清楚,我用python2.7.15是可以的。

python的安装路径不能有空格,这个是因为python自己的一个bug,为了规避必须这样

接下来是官方文档中的准备工作

  • depot_tools,这个是google的代码拉取工具,安装好以后加入环境变量PATH以方便执行,

  • 设置环境变量DEPOT_TOOLS_WIN_TOOLCHAIN=0这样就会使用你已经安装的vs,否则他会重新下载一个特殊版本的VS,

  • 缓存,这一步是可选的,不过我建议大家都进行配置。

你可以设置一个环境变量GIT_CACHE_PATH,这个环境变量表示一个目录,如果有这个环境变量,那么拉取的代码仓库会被使用git fetch命令缓存一份在这里,如果中间拉取代码中断,下次可以直接从这里的缓存仓库重新拉取,而不用通过网络,当然如果别人已经拉取过一次并且设置了这个环境变量,你可以将你的环境变量设置到为别人的缓存目录(局域网可以直接网络磁盘),那么你就可以避免大量的网络下载过程。同样,你在完成后也可以把你的仓库缓存借给别人。

如果你准备好了以上这些东西,那么就可以正式开始了。

拉取代码

注意不要自己去github上拉取代码,electron的构建系统中对目录结构写死了,所以自己拉取代码很可能遇到目录结构不正确。

首先在准备好的目录里执行

1gclient config --name "src/electron" --unmanaged https://github.com/electron/electron@v4.0.5 2 3

这里的gclient是之前准备的depot_tools中的工具,执行命令后会生成一个.gclient文件
注意url后面跟着的标识符表示的就是要下载的electron的仓库的tag或者分支,你可以根据自己的需要更改。至少在4.X都是这样,更高版本的情况不太清楚。

第一次执行gclient需要下载一些东西,比较慢

接着执行

1gclient sync --with_branch_heads --with_tags 2 3

接下来就是漫长的等待,我当时等了8个小时。看不到进度,有个大概的方法能算进度,全部下载完你的环境变量中设置的缓存目录大约为20.7GB,你可以看你的目录离这个目标还差多远

如果中途失败请再次执行

1gclient sync --with_branch_heads --with_tags 2 3

如果你环境变量设置了缓存目录,此时会有很大的帮助

构建

生成工程

此时你应该会看到一个src目录,进入src目录

执行

1set CHROMIUM_BUILDTOOLS_PATH=%cd%\buildtools 2$ gn gen out/Debug --args="import(\"//electron/build/args/debug.gn\")" 3 4

其中第一个CHROMIUM_BUILDTOOLS_PATH也可以设置成环境变量
接下来是执行GN生成工程,可以看到这个是debug版本的配置,最终会生成到out/Debug目录里。
如果想要生成release配置,只要参数改成release.gn即可(官方文档有描述)

如果需要生成vs工程可以在后面加上--ide=vs2017,注意不要加在--args的双引号里面(官方文档有描述),注意vs打开有5600多个项目(不是文件!!!),所以会比较卡,机器不好的人不要体验。

默认生成的是64位,如果需要生成32位,在import()后面加上target_cpu="x86",注意这个是在--args的双引号里面的(官方文档有描述)

编译

electron的编译系统是基于ninja,哪怕是vs工程其实也是用ninja编译的

执行

1ninja -C out/Debug electron 2 3

开始编译,如果编译release换成相应的存放release构建工程的目录。

大概有1万7千个编译任务,检验你CPU的时候到了,在经过一段等待后,会看到electron.exe被生成出来

注意debug和release最终生成的electron.exe有很大的区别,debug版本的比较小,但是会依赖很多的dll,应该是把大部分组件编译成dll版本了
release的比较大,但是依赖的dll比较少

总结

总体的编译过程主要耗时在拉取代码上,所以网络条件一定要准备好,中间我遇到了很多问题,几乎没什么资料可查,都是通过阅读构建工具和构建配置的源码解决的。

这些问题的出现都是工具配置与开发环境造成的,这些东西并没有在官方文档中描述,所以准备工作中的每一项都代表着我踩过的坑,所以我把这些准备工作总结出来,希望能够减少他人的困惑。

当然每个人的开发环境都不一样,所以有可能还有我没遇到的问题,对于这种问题只能针对问题具体发生的情况去阅读构建工具和构建配置的源码并辅以一定的调试手段解决。可能需要学习python、js、node、gn、ninja、bat、golang等一系列的知识,这对于开发者的技术广度和学习能力都有很高的要求。

代码交流 2021