# 包管理
当前开发模式(MultiRepo)的痛点:
- 代码复用
在维护多个项目的时候,有些逻辑很有可能会被多次用到,比如一些基础组件、公共函数、或者一些配置, 如果这些代码出现bug,或者需要做一些调整的时候,就得改多份,维护成本越来越高
- 版本管理
当项目多了后,很容易出现了依赖更新不及时的情况
- 项目基建
在MultiRepo开发模式中,各个项的工作流是割裂的,因此每个项目需要单独配置开发环境/配置ci流程/配置部署发布流程等,假设有10个项目,就需要维护10份代码和相同的流程, 各个项目间存在构建,部署,发布不统一的情况维护成本增加
使用包管理带来的收益:
- 工作流的一致性
所有的项目都有关系,复用起来非常方便,如有依赖变动,所以依赖的项目会立马感知到。并且所有项目都是使用最新的代码,不会出现更新不及时的问题
- 项目基建成本低
所有项目复用一套标准的工具和规范,无需切换开发环境, 如果有新的项目接入,可直接复用现有流程
- 团队协作容易
都在一个仓库开发(monorepo),能够方便的共享代码
# monorepo
业界首推的是采用monorepo, 将相关的模块用单一的仓库统一管理, 该方案需要我们将工程的多个组件抽象成npm包, 通过npm install的方式引入依赖.
优缺点:
- 抽成组件之后,获取依赖简单,
npm install就能处理 - 各个模块都在同一仓库,不好进行模块的版本管理
- 对于进行已久的项目需要比较清晰的设计与抽离模块,工作量大
# submodule
相对于成型效果比较好的monorepo,git自带的submodule更贴切人少工作量大的团队
submodule需要我们先将要抽离的子模块放到不同的git仓库中,在主项目的.gitmodules写明引用仓库,就能够同步关联子模块