写在前面
自从Google开源了Bazel之后,国内外的码农们开展了各种口水大战,褒贬不一。写这篇文章之前我已经明白让程序员去接触新技术是有多困难,作为科普文章吧。
Bazel是什么
Bazel是通用构建工具,可以理解为CMake, maven, gradle同类的构建工具。不同之处在于它的构建速度和通用性。目前可以构建大部分语言项目,使得构建混合语言开发的项目变得很简单。
如何使用Bazel构建混合语言应用
现在给出一个具体的例子,是我在使用Bazel之后总结出来的最佳实践。 这是一个正在开发的IM开源项目:Pumpkin IM
我们都知道开发IM项目,模块非常多,其中包含各种语言的SDK以及服务端的各种混合语言开发,项目源码管理麻烦很多。
Bazel项目最佳实践
看一个IM SDK仓库的结构: Pumpkin Android
CI系统集成
Pumpkin使用的是Travis, 其中包含了Linux和MacOS bazel的安装以及Android SDK环境自动初始化。
文档管理
推荐使用Facebook Docusaurus, Pumpkin IM就是使用的这个。需要关注的问题是项目模化之后如何将文档统一管理。由于Pumpkin IM并不支持Windows开发,所以可以使用软链接来处理。 Docusaurus默认使用的文档路径是当前仓库的docs目录,可以在每一个模块仓库下面创建一个docs目录,然后链接到主仓库下面。稍微解释一下这里。当项目复杂了之后我们需要做版本管理,所以只在Pumpkin这个项目做管理,其他模块都是submodule, 所以docs目录将会是:
docs/
android/ => pumpkin-android/docs
apple/ => pumpkin-apple/docs
cloud/ => pumpkin-cloud/docs
protocol/ => pumpkin-protocol/docs
....
website/
这样就只需要在pumpkin项目提供一个GitHub Landing page就可以了。