初面网初面网

Monorepo

简介

Monorepo(Monolithic Repository), 是指在一个仓库中管理多个项目的代码。与多仓库不同,Monorepo 中所有的项目代码都存储在同一个仓库中,通过版本控制工具(如 Git)进行管理。

  1. 优势
    1. 代码共享:多个项目可以共享相同的代码库,避免重复开发和维护。
    2. 版本控制:所有项目的代码都在同一个仓库中,方便进行版本控制和协作。
    3. 依赖管理:可以在一个地方管理所有项目的依赖,避免版本冲突和不一致。
    4. 构建和部署:可以在一个地方构建和部署所有项目,简化流程。
  2. 劣势
    1. 仓库大小:由于所有项目的代码都在同一个仓库中,仓库的大小会增加。
    2. 复杂度:管理多个项目的代码会增加仓库的复杂度,需要合理组织目录结构和代码。
    3. 学习成本:开发人员需要学习如何在一个仓库中管理多个项目的代码。

Monolith、Multirepo 与 Monorepo

  1. Monolith
    1. 简介:Monolith 是指将整个应用程序构建为单个单元的架构模式,所有功能模块都打包在一个应用程序中。
    2. 优势:
      1. 简单:开发、测试、部署和调试都在一个项目中进行,流程简单。
      2. 性能:模块间调用是进程内调用,没有网络延迟,性能较好。
      3. 一致性:只有一个代码库,版本管理简单。
    3. 劣势:
      1. 扩展性:难以针对特定功能进行独立扩展。
      2. 技术栈:所有模块必须使用相同的技术栈。
      3. 部署:任何小改动都需要重新部署整个应用。
      4. 复杂度:随着功能增加,代码库会变得庞大复杂,难以维护。
  2. Multirepo
    1. 简介:Multirepo 是指将不同的项目或服务分别存储在独立的代码仓库中进行管理。
    2. 优势:
      1. 独立性:每个项目可以独立开发、测试、部署和扩展。
      2. 技术多样性:不同项目可以选择最适合的技术栈。
      3. 安全性:权限可以按项目单独设置,更易控制访问权限。
      4. 团队自治:不同团队可以独立管理自己的代码库。
    3. 劣势:
      1. 依赖管理:项目间的依赖关系难以统一管理,容易出现版本冲突。
      2. 代码共享:难以在项目间共享代码,可能导致重复开发。
      3. 协作成本:跨项目协作时需要协调多个仓库的变更。
      4. 运维复杂:需要维护多个CI/CD流水线和部署环境。
  3. Monorepo
    1. 简介:Monorepo 是指在一个代码仓库中管理多个相关项目的架构模式。
    2. 优势:
      1. 代码共享:多个项目可以共享相同的代码库,避免重复开发和维护。
      2. 原子提交:相关的变更可以在一次提交中完成,保证一致性。
      3. 统一工具链:可以为所有项目使用统一的构建、测试和部署工具。
      4. 简化依赖管理:所有项目的依赖都在同一地方管理,避免版本冲突。
      5. 便于重构:跨项目的重构可以一次性完成。
    3. 劣势:
      1. 仓库大小:随着项目增加,仓库体积会变得很大。
      2. 构建时间:可能需要更长的构建和测试时间。
      3. 权限管理:难以对不同项目设置不同的访问权限。
      4. 学习曲线:团队成员需要了解整个代码库的结构和规范。

Monorepo的组成

  1. apps,应用
  2. packages,包
  3. 公有依赖和私有依赖
  4. 公有配置和私有配置

配置

使用pnpm管理monorepo,在根目录下创建pnpm-workspace.yaml文件,内容如下:

packages:
  - 'apps/*'
  - 'packages/*'

安装依赖

在根目录下执行以下命令安装依赖:

pnpm add -w -D 依赖名
# -w 表示在根目录下安装依赖
# -D 表示安装为开发依赖(非生产依赖)

更新于 2025/11/2