🧩 一、为什么 2025 年还在谈 Monorepo?
"因为我们不只是写页面,我们在协调宇宙。"
🌈 背景演进:
- 2018 以前:前端项目分散,每个 repo 都是一个孤岛 🏝️。
- 2019--2022:组件库复用开始流行,人们引入 Lerna / Yarn Workspaces。
- 2023--2024:微前端 + PNPM Workspaces 成为主流,TurboRepo、Nx 攻城略地。
- 2025 :AI 自动化、CI/CD 智能化、跨端构建统一化的时代。
👉 一个 repo 管理多个平台,已经不只是趋势,而是刚需。
举例,一个现代公司可能有以下前端资产:
bash
/apps
├── web-admin-dashboard
├── mobile-react-native-app
├── desktop-electron-shell
/packages
├── ui-components
├── utils
├── config
├── shared-apis
/tools
├── scripts
└── ai-automation
这些项目耦合而不乱,各自独立又共享底层逻辑。
一个提交,影响多个生态。让工程协同像调交响乐一样优雅 🎻。
🏗️ 二、核心理念:依赖统一 · 构建分层 · 模块自治
要设计一个面向未来的 Monorepo,我们得明确三大原则:
1. 依赖统一(Unified Dependency Graph)
使用 pnpm 或 yarn berry 实现 workspace 的扁平依赖管理。
核心思想是:
所有模块共享依赖声明,但只在本地建立"引用符号链接",避免重复安装。
推荐配置:
csharp
pnpm init
pnpm install -w
pnpm add typescript eslint prettier -w
package.json 的结构 👇:
json
{
"private": true,
"name": "@company/monorepo",
"workspaces": [
"apps/*",
"packages/*"
],
"devDependencies": {
"typescript": "^5.8.0",
"turbo": "^2.0.4",
"eslint": "^9.0.1"
}
}
2. 构建分层(Layered Build System)
在 2025 年,你可以让 单个命令自动调度依赖构建链 💥。
例如使用 Turborepo:
bash
# turbo.json
{
"$schema": "https://turborepo.org/schema.json",
"pipeline": {
"build": {
"dependsOn": ["^build"],
"outputs": ["dist/**"]
},
"lint": {},
"dev": {
"cache": false
}
}
}
在任意子项目执行:
arduino
pnpm turbo run build
Turbo 会自动:
- 跳过未变更模块;
- 并行执行独立任务;
- 缓存产物到远端(甚至可以进入 AI 编译缓存阶段,调用云 API 提速)。
AI 实际用这种模式可在 30 秒内构建一个百模块前端仓库 🚀。
3. 模块自治(Autonomous Module Design)
每个子包(package)应该自包含:
- 自己的依赖;
tsconfig.json;- 测试与构建脚本;
- 与主仓库 ESLint、Prettier 一致的约束。
例如 /packages/ui-components/package.json:
perl
{
"name": "@company/ui-components",
"version": "1.0.0",
"main": "dist/index.js",
"scripts": {
"build": "tsup src/index.ts --dts",
"test": "vitest"
}
}
它既能作为独立 npm 包发布,也能被内部 app 实时引用。
这就是所谓 模块自治 + 内部共享生态。
🧠 三、灵魂武器:工具组合拳
| 工具 | 职责 | 备注 |
|---|---|---|
| PNPM Workspaces | 快速管理多项目依赖 | 替代 Yarn Workspaces |
| TurboRepo / Nx | 构建和缓存调度 | Turbo 更轻量,Nx 更企业级 |
| ESBuild / Vite | 开发与构建 | 统一构建接口 |
| TypeScript Project References | 跨包 TS 类型共享 | VSCode 智能推导 |
| Vitest / Playwright | 单元与端到端测试 | 一体化测试方案 |
| Changesets | 自动版本与发布日志管理 | 💡 Monorepo 宝藏 |
| AI Assistant (自研) | 自动生成 CI 配置、Doc 与代码检查 | 2025 新趋势!🤖 |
⚡ 四、实际项目结构:带电的架构树
csharp
company-monorepo/
│
├── apps/
│ ├── web-dashboard/
│ │ ├── src/
│ │ ├── vite.config.ts
│ │ └── package.json
│ ├── mobile-rn/
│ └── electron-shell/
│
├── packages/
│ ├── ui-kit/
│ ├── hooks/
│ ├── api/
│ ├── config/
│ └── shared-types/
│
├── .husky/ # 提交钩子
├── turbo.json # 构建管控
├── pnpm-workspace.yaml
└── tsconfig.base.json
🧬 五、从零搭建命令摘要
bash
# 初始化 monorepo 框架
pnpm init
pnpm install -D turbo typescript eslint prettier
# 初始化构建缓存与脚本
npx turbo init
# 新建 package 与 app
pnpm create vite apps/web-dashboard --template react-ts
pnpm create package packages/ui-kit
# 关联开发
pnpm add @company/ui-kit -F @company/web-dashboard
💡 Tip:
使用 -F 指定 workspace,能保证关联时版本精准,不会"拉最新"。
🧑💻 六、2025 年的前端 CI/CD 革命
AI 工程辅助 + 云缓存 = Monorepo 飞起
建议在 CI 管线中加入 AI 审查逻辑,例如:
yaml
# .github/workflows/build.yml
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v3
- run: pnpm install
- run: pnpm turbo run lint build
- run: npx ai-cli check code-quality --mode deep
AI 可在此阶段执行:
- 智能依赖剔除;
- 构建速度预测;
- commit 语义检查;
- 自动修复潜在的"循环引用"问题。
让代码像 Ferrari 一样流畅上路 🏎️。
🧘 七、哲学总结:Monorepo ≠ 巨大代码仓库
Monorepo 不是"代码都堆一起",而是:
"一个逻辑上的星系,每个模块都是一颗恒星。"
它的灵魂是统一协作、共享生态、分层构建、智能管理 。
当你配合 AI 工具链、云缓存、项目引用机制,
整个前端团队的效率,将比肩量子传送般顺畅 ⚛️。
🪄 结语:2025,前端工程师的蜕变
未来的前端不止是写 UI,而是建造整个信息生态的"系统工程"。
Monorepo 是这场蜕变的土壤;
AI 是新一代的开发同事;
而工程师,则是架构的诗人。