1. 什么是 Monorepo?
Monorepo(單倉庫)指的是把多個項目/包放在一個代碼倉庫里統一管理。常見結構:
/repo-root/packages/ui-lib/utils/apps/web-apppackage.jsonpnpm-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 我應該放到工程化中實在是懶得建專欄,但是它很常用并且可以讓多項目、多包的管理更高效。雖然簡單但是大家還是得知道這個東西并能用。