Monorepo 是什么?如何使用并写自己的第三方库

发布于:2025-09-07 ⋅ 阅读:(17) ⋅ 点赞:(0)

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 我应该放到工程化中实在是懒得建专栏,但是它很常用并且可以让多项目、多包的管理更高效。虽然简单但是大家还是得知道这个东西并能用。



网站公告

今日签到

点亮在社区的每一天
去签到