一分钟入门 Monorepo,确定不看看吗?

为什么 MultiRepo 有局限性

在软件开发过程中,采用 MultiRepo(一个项目一个仓库)的方式存在一些不足之处:

  1. 代码复用问题

    • 多个项目需要复制和维护相同的代码,增加了工作量和风险。
    • 如果将代码抽取为 npm 包,重新发布和安装的步骤繁琐。
    • 多个项目依赖的工具包更新不一致,导致版本管理困难。
  2. 基建和部署繁琐

    • 需要为每个项目建立独立的基础设施、构建流程、部署流程和发布流程,增加了管理和维护成本。

Monorepo 的优势

Monorepo 是将多个项目放置在一个仓库中的方式,具有以下优势:

  1. 代码复用和管理

    • 代码改动可以同步到所有项目,便于代码复用和统一管理。
    • 统一更新代码库可能导致项目 bug,但也提升了对代码的维护和管理效率。
  2. 共享基础设施

    • 可以共享同一套基础设施,简化构建流程,减少重复工作,提高开发效率。

搭建 Monorepo 步骤

初始化项目

在根目录下创建 package.json 文件,并在 packages 目录下放置各个子项目仓库。

以下是一个简单的 Monorepo 项目结构示例:

go 复制代码
my-monorepo/
├── package. json
├── pnpm-workspace. yaml
└── packages/
    ├── project1/
    │   ├── package. json
    │   ├── src/
    │   └── ...
    ├── project2/
    │   ├── package. json
    │   ├── src/
    │   └── ...
    └── shared-utils/
        ├── package. json
        ├── src/
        └── ...

在这个示例中:

  1. my-monorepo/ 是根目录,包含了主要的项目配置文件。
  2. package. json 是根目录下的配置文件,用于定义整个 Monorepo 项目的依赖和脚本。
  3. pnpm-workspace. yaml 文件定义了哪些目录下的包被视为 workspace 中的一部分。
  4. packages/ 目录是存放各个子项目仓库的文件夹。
  5. project1/ 和 project2/ 是两个独立的项目,每个项目都有自己的 package. json 文件和代码目录。
  6. utils/ 是一个存放共享工具库的项目,其他项目可以依赖这个工具库进行代码复用。

创建 pnpm-workspace.yaml 文件

yaml 复制代码
packages:
  - 'packages/**'

这个文件定义了哪些目录下的包被视为 workspace 中的一部分。

子项目的配置

  • 切换到子项目进行初始化和下载依赖。
  • 或者使用 pnpm -f <package_selector> <command> 命令。
shell 复制代码
# 添加第三方包
pnpm -f @packages/components add lodash
# 添加内部包
pnpm -filter @packages/components add @packages/utils@*

对应子项目的 package.json 会生成配置如下:

json 复制代码
{
  "dependencies": {
    "lodash": "^4.17.21",
    "@packages/utils": "workspace:*"
  }
}

参考

相关推荐
im_AMBER7 小时前
告别“玄学”UI:从“删代码碰运气”到“控制 BFC 结界”
前端·css
刘一说7 小时前
Java 中实现多租户架构:数据隔离策略与实践指南
java·oracle·架构
千寻girling7 小时前
《 MongoDB 教程 》—— 不可多得的 MongoDB
前端·后端·面试
国科安芯7 小时前
火箭传感器控制单元的抗辐照MCU选型与环境适应性验证
单片机·嵌入式硬件·架构·risc-v·安全性测试
晚霞的不甘7 小时前
Flutter for OpenHarmony 打造沉浸式呼吸引导应用:用动画疗愈身心
服务器·网络·flutter·架构·区块链
攀登的牵牛花8 小时前
前端向架构突围系列 - 状态数据设计 [8 - 3]:服务端状态与客户端状态的架构分离
前端
喵叔哟8 小时前
67.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--分摊功能总体设计与业务流程
数据库·微服务·架构
掘金安东尼8 小时前
⏰前端周刊第 452 期(2026年2月2日-2月8日)
前端·javascript·github
古茗前端团队8 小时前
业务方上压力了,前端仔速通RGB转CMYK
前端
roman_日积跬步-终至千里8 小时前
【MLOps(1)】MLOps 架构总览与全方位基础:从实验室到生产环境的实战指南
架构