1. 什么是 Monorepo?
Monorepo(单仓库)指的是把多个项目/包放在一个代码仓库里统一管理。常见结构:
/repo-root
/packages
/ui-lib
/utils
/apps
/web-app
package.json
pnpm-workspace.yaml
好处:
- 内部库能直接共享,不必每次发 npm。
- 统一依赖、构建、测试流程。
- 本地修改库源码,应用能立刻生效。
2. 如何搭建?
初始化
mkdir my-monorepo && cd my-monorepo
pnpm init -y
pnpm-workspace.yaml
:
packages:
- "packages/*"
- "apps/*"
3. 创建一个库
在 packages/ui-lib
下:
package.json
{
"name": "@org/ui-lib",
"version": "0.0.0",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"scripts": {
"build": "tsup src/index.ts --format esm,cjs --dts"
}
}
src/index.ts
export function greet(name: string) {
return `Hello, ${name}`;
}
4. 在应用中使用
在 apps/web-app/package.json
:
{
"name": "web-app",
"dependencies": {
"@org/ui-lib": "workspace:*",
"react": "^18.0.0"
}
}
在代码里使用:
import { greet } from '@org/ui-lib';
export default function App() {
return <div>{greet('Alice')}</div>
}
运行:
pnpm --filter web-app dev
5. 本地调试
直接改
packages/ui-lib/src
,应用就能看到效果。如果没生效,可以在库里运行:
pnpm run build --watch
应用会引入
dist
下的结果。
6. 适用场景
- 有多个共享库(UI 组件、工具函数、API 客户端)。
- 大型项目,需要统一构建/测试/发布。
- 想在本地同时开发库和应用,减少发布调试的麻烦。
如果项目很小,用多仓库管理会更简单。
7. 总结
Monorepo 我应该放到工程化中实在是懒得建专栏,但是它很常用并且可以让多项目、多包的管理更高效。虽然简单但是大家还是得知道这个东西并能用。