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

1,222 阅读2分钟

我们想开发或者测试某个库,一种方法是使用npm link,另一种方法是workspace。我们在一个monorepo下同时创建库和测试库的项目(playground),就可以很方便地进行代码的管理修改和测试。

搭建 Monorepo 步骤

基于 pnpm 的 monorepo 项目结构:

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

创建 pnpm-workspace.yaml 文件:

packages:
  - 'packages/**'

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

接着,就可以在 packages 下面创建任意多的项目。

项目依赖管理

对于所有项目都可以用的,直接在根目录 pnpm install 就可以了。

如果是某个项目,打开到对应路径执行 pnpm install。或者使用 pnpm -f <package_selector> <command> 命令。

我们还可以将另一个项目作为某个项目的依赖。

# 添加第三方包
pnpm -f @packages/components add lodash
# 添加同一 workspace 的包
pnpm -filter @packages/components add @packages/utils@*

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

{
  "dependencies": {
    "lodash": "^4.17.21",
    "@packages/utils": "workspace:*"
  }
}

结语

我们创建monorepo,主要有两个原因,第一个是如果多个项目使用同一套基础设施(比如很多相似的开发依赖、相同的包管理工具),那我们可以在 monorepo 的根目录统一管理和复用,另一个就是monorepo下的项目可以直接相互依赖,我们可以发挥 workspace 的方便之处支持我们的开发调试。

在其他情况下,就不建议使用monorepo。所有技术方案在学习的时候,都是尽可能去尝试。在生产实践的时候,大部分都是非必要不使用的。

-- 2024年12月14日 第二次编辑

参考