写在前面
自从 Google 开源了 Bazel https://bazel.build/ 之后, 国内外的码农们开展了各种口水大战, 褒贬不一. 写这篇文章之前我已经明白让程序员去接触新技术是有多困难, 作为科普文章吧.
Bazel 是什么
Bazel 是通用构建工具, 可以理解为 CMake, maven, gradle 同类的构建工具. 不同之处在于它的构建速度和通用性. 目前可以构建大部分语言项目, 使得构建混合语言开发的项目变得很简单.
如何使用 Bazel 构建混合语言应用
现在给出一个具体的例子, 是我在使用 Bazel 之后总结出来的最佳实践. 这是一个正在开发的 IM 开源项目: Pumpkin IM https://github.com/deepinthink/pumpkin
我们都知道开发 IM 项目, 模块非常多, 其中包含各种语言的 SDK 以及服务端的各种混合语言开发, 项目源码管理麻烦很多.
Bazel 项目最佳实践
看一个 IM SDK 仓库的结构: Pumpkin Android https://github.com/deepinthink/pumpkin-android
CI 系统集成
Pumpkin 使用的是 Travis, 其中包含了 Linux 和 MacOS bazel 的安装以及 Android SDK 环境自动初始化.
文档管理
推荐使用 Facebook Docusaurus https://docusaurus.io/ , 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 就可以了.
来源: https://www.cnblogs.com/bluearty/p/10269981.html