Skip to content

Monorepo

TODO 学习 https://github.com/joelparkerhenderson/monorepo-vs-polyrepo

1. 什么是 Monorepo

Monorepo 是指在一个仓库中管理多个项目,这些项目可以是前端项目、后端项目、工具库等等。Monorepo 有很多优点,比如:

  • 代码复用:不同项目之间可以共享代码,减少重复代码
  • 统一管理:可以统一管理依赖、构建、测试等
  • 代码可见性:可以更方便地查看不同项目的代码
  • 依赖管理:可以统一管理依赖,减少依赖冲突
  • 一致性:可以保证不同项目的一致性

Monorepo 也有一些缺点,比如:

  • 仓库体积:随着项目数量的增加,仓库体积会变得很大
  • 构建时间:随着项目数量的增加,构建时间会变得很长
  • 依赖管理:依赖管理会变得复杂
  • 代码可见性:不同项目之间的代码可见性会变得很差

Monorepo 适合于中小型团队,大型团队可能会因为仓库体积、构建时间等问题而不适合使用 Monorepo。

2. 快速开始

pnpm 是一个快速、强大的包管理工具,支持 monorepo 管理。

bash
mkdir monorepo-demo
cd monorepo-demo
pnpm init

创建 pnpm-workspace.yaml 文件,配置 monorepo 管理。

yaml
packages:
  - packages/*

安装一个全局依赖:

bash
pnpm add typescript -D -w

创建一个包:

bash
mkdir packages/web
cd packages/web
pnpm init

然后编辑包名为 @demo/web

安装一个局部依赖:

bash
pnpm add vue -r --filter @demo/web

在其他包中引用包 @demo/web

bash
pnpm add @demo/web -r --filter @demo/app

这样 @demo/app 就可以引用 @demo/web 了。