什么是 Monorepo?
Monorepo 是一个包含许多不同应用程序和包的单个代码库。
另一种设置称为 **Polyrepo** - 多个代码库,它们分别发布和版本化。
共享代码
在 Polyrepo 中
在 Polyrepo 设置中,在应用程序之间共享代码的过程相对较长。
假设您有三个独立的存储库 - app
、docs
和 shared-utils
。app
和 docs
都依赖于 shared-utils
,它作为包发布到 npm 上。
假设 shared-utils
中的错误导致 app
和 docs
中都出现严重问题。您需要
- 在
shared-utils
中进行提交,修复错误 - 在
shared-utils
中运行publish
任务,将其发布到 npm 上 - 在
app
中进行提交,提升shared-utils
依赖项的版本 - 在
docs
中进行提交,提升shared-utils
依赖项的版本 app
和docs
现在可以部署了。
依赖于 shared-utils
的应用程序越多,此过程就越长。它可能非常繁琐。
在 Monorepo 中
在 Monorepo 设置中,shared-utils
将与 app
和 docs
位于 **同一个代码库** 中。这使得这个过程非常简单
- 在
shared-utils
中进行提交,修复错误 app
和docs
现在可以部署了。
不需要版本控制,因为 app
和 这使得能够创建单个提交,一次性修复多个应用程序和包中的错误。这对团队来说可以极大地提高速度。
单仓库如何运作?
单仓库的主要构建块是工作区。您构建的每个应用程序和包都将在自己的工作区中,并拥有自己的 package.json
。正如您将在我们的指南中了解到的,工作区可以**相互依赖**,这意味着您的 docs
工作区可以依赖于 shared-utils
{
"dependencies": {
"shared-utils": "*"
}
}
工作区由与安装依赖项相同的 CLI 管理。
根工作区
您还将拥有一个根工作区 - 代码库根文件夹中的 package.json
。这是一个用于以下操作的有用位置
- 指定整个单仓库中存在的依赖项
- 添加对整个单仓库(而不仅仅是单个工作区)进行操作的任务
- 添加有关如何使用单仓库的文档