Skip to content

什么是monorepo?

monorepo 是一个代码库中包含许多不同应用程序和包的集合。

monorepo如何运作?

monorepo 的主要构建块是 workspace。每个应用程序和包都将位于自己的workspace中,并带有自己的package.json. workspace 可以相互依赖。

同时它还拥有一个 root workspace - 根目录下的 package.json。它用于:

  1. 指定整个 monorepo 中存在的依赖项
  2. 添加在整个monorepo上运行的任务,而不仅仅是单个工作区
  3. 添加有关如何使用 monorepo 的文档

在monorepo中安装包

Turborepo 与四个包管理器兼容:

  • npm
  • pnpm
  • Yarn 1
  • Yarn >=2(文档即将推出)

添加/删除/更新包(以pnpm为例)

  • 在 workspace 添加包
shell
pnpm add <package> --filter <workspace>
  • 在 workspace 删除包
shell
pnpm uninstall <package> --filter <workspace>
  • 在 workspace 更新包
shell
pnpm update <package> --filter <workspace>

workspace

workspace 是 monorepo 的构建块。添加到 monorepo 的每个应用程序和包都将位于其自己的工作区内。

配置 workspace(以pnpm为例)

将要配置为工作区的文件夹添加到pnpm-workspace.yaml根目录中存在的文件中。

yaml
packages:
  - "docs"
  - "apps/*"
  - "packages/*"

以上配置对应的工程目录为

my-monorepo
├─ docs
├─ apps
│  ├─ api
│  └─ mobile
├─ packages
│  ├─ tsconfig
│  └─ shared-utils

推荐的一个常见约定是拥有顶级apps/和packages/目录。