购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.1.5 Monorepo的缺点

有优点就会有缺点,Monorepo的缺点如下。

1.相关开发工具不成熟

Monorepo是近年来流行起来的一种开发方式,相关工具链和IDE仍在适应和调整阶段。尽管VS Code、JetBrains IDE等主流开发工具对于Monorepo的支持已经有所提升,但仍存在一些问题,如JetBrains在大型Monorepo项目中重建索引需要耗费大量时间。同样,Git在处理大型Monorepo项目时的性能也不尽如人意。配置生产环境所需的成本也相当高。但是,Monorepo的发展势头不可阻挡,越来越多的项目正在解决相关问题,促进了整体公共工具的发展趋势。

2.CI/CD流水线较为复杂

维护Monorepo项目是一项长期任务,这个过程可能会导致构建速度变慢。由于有太多相互依赖的包和模块,构建需要太多的步骤,可能导致迭代停滞不前。任何改动都需要重新构建整个Monorepo项目,而不是只构建应用程序的一部分。需要深入了解代码库之间的关系,并编写自动化流程。更重要的是,还需要长期维护这些流程。最终,开发者需要额外花费时间和精力创建和维护构建系统,随着代码库的复杂度增加,构建系统也会变得更加复杂。由于时间有限,流水线的技术债务很容易积累。

3.测试复杂

测试是限制发布速度的一个重要因素,尤其在Monorepo项目中。测试和通常的构建/编译任务必须按照正确的顺序完成,才能确保所有依赖项从正确的来源构建并在正确的时间可用。与构建一样,测试整个代码库也需要时间。最理想的方案是小规模更改进行测试并重新部署。然而,随着代码复杂性的增加,测试整个库可能更加现实。要根本地解决这些问题,需要进行高维度的编排和依赖分析,但这超出了本书的范围。当项目发展到一定阶段时,就必须考虑这个问题。

4.固有复杂性

管理Monorepo项目非常复杂,需要解决很多问题,而且容易出错。因为将适用于单个包或应用程序的内容映射到多个包和应用程序是一项非常复杂的任务,学习曲线非常陡峭,即使有很好的文档也不能解决这个问题。定制协调和自动化脚本也需要相当长的时间去学习使用。

5.隔离性差

维护文件的所有权具有更大的挑战性,因为如Git或Mercurial等系统缺少内置目录权限。通常需要在一个目录下面维护一个Markdown文档来指明负责人。而Multirepo的隔离性带来的一个好处是可以责任到人,不同的开发者负责不同的repo。但是带来的坏处,自然也是责任到人,库和责任的隔离带来交流的不便,潜在地增加了重复造轮子的可能性。通常,一个复杂的Monorepo项目也会为子项目设置几个负责人,但是因为代码仍然在一起,其变化和沟通成本要低于Multirepo。 AfOJyUouIZtPMVdet0FC4xjXTRs65imUEHPiTxEU2V04wsmyN3HvcIbnDh8Yl8Um

点击中间区域
呼出菜单
上一章
目录
下一章
×