Monorepo 与 Microrepo
哪个更好?为什么不同的公司选择不同的选项?

Monorepo 并不新颖;Linux 和 Windows 都是使用 Monorepo 创建的。为了提高可扩展性和构建速度,Google 开发了内部专用工具链,以更快进行扩展,并制定严格的编码质量标准以保持一致性。
亚马逊和 Netflix 是微服务理念的主要倡导者。这种方法自然将服务代码分离到不同的代码库中。它扩展较快,但可能在后期出现治理痛点。
在 Monorepo 中,每个服务是一个文件夹,每个文件夹都有一个 BUILD 配置和 OWNERS 权限控制。每个服务成员对自己的文件夹负责。
相反地,在Microrepo中,每个服务负责其自己的存储库,构建配置和权限通常是针对整个存储库设置的。
在Monorepo中,依赖关系跨整个代码库共享,不考虑您的业务,因此当版本升级时,每个代码库都会升级其版本。
在Microrepo中,依赖关系在每个存储库中进行控制。企业可以根据自己的计划选择升级版本的时间。
Monorepo有一个标准的提交规范。谷歌的代码审查流程因设定高标准而闻名,确保了Monorepo的质量标准一致性,不论业务领域如何。
Microrepo可以设定自己的标准,或者通过采纳最佳实践来采用共享标准。它能够更快速地扩展以适应企业需求,但代码质量可能会有所不同。
Google工程师开发了Bazel,Meta开发了Buck。此外,还有其他开源工具可供使用,如Nx、Lerna等。
多年来,Microrepo支持的工具更多,包括Java的Maven和Gradle、NodeJS的NPM、C/C++的CMake等。