我们想开发或者测试某个库,一种方法是使用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日 第二次编辑