Monorepo
2022-7-28 00:0:0 Author: taxodium.ink(查看原文) 阅读量:0 收藏

面对 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 的样子了。

在这个基础上,还需要:

  1. 每个 repo 逻辑上独立,项目之间可能是不相关的,松散连接的,或者可以通过一些方式连接起来。(譬如 pnpm 的 workspace)
  2. 要保证项目之间的依赖关系定义清晰
    项目间的依赖关系
    monorepo 的项目之间可能存在依赖关系,如何可以方便地添加依赖,完成构建。在 pnpm 中,可以在子项目的 package.json 中通过 workspace 关键字去引用项目。
    项目第三方依赖间的关系
    monorepo 中可能多个项目同时依赖了相同的第三方依赖,如都依赖 vue。在 pnpm,相同的依赖可以考虑按照到 workspace 中,而不是具体的项目里。
    尽管都是依赖 vue,但是不同项目可能依赖不同版本的 vue,需要解决版本问题。

对于 项目间的依赖关系 ,为了实现一定程度的自动化,需要借助一些工具,如 NXLernaturborepo

对于 项目第三方依赖间的关系, 可以借助 yarnpnpm 等包管理工具的 workspace 功能去实现。

所以,有别于 Single-repo Monolisth, monorepo 需要有明确清晰的依赖关系,能够很方便地管理依赖。


文章来源: https://taxodium.ink/monorepo.html
如有侵权请联系:admin#unsafe.sh