面对 multirepo 的这些问题,就有人提出了 monorepo
的组织方式。
A monorepo is a single repository containing multiple distinct
projects, with well-defined relationships.
一个 monorepo 应该是:
简单的理解,monorepo 就是把原来的 multirepo 合并成一个 repo。
那是不是把每个 repo 分别放到不同的目录,建一个新的庞大的仓库,就完事了呢?
这样就变成一个“大杂烩”了,被称为 Single-repo Monolith
, 已经接近 monorepo 的样子了。
在这个基础上,还需要:
package.json
中通过 workspace 关键字去引用项目。
对于 项目间的依赖关系 ,为了实现一定程度的自动化,需要借助一些工具,如 NX,Lerna,turborepo。
对于 项目第三方依赖间的关系, 可以借助 yarn,pnpm 等包管理工具的 workspace 功能去实现。
所以,有别于 Single-repo Monolisth, monorepo 需要有明确清晰的依赖关系,能够很方便地管理依赖。