使用 pnpm 搭建 Monorepo 仓库
什么是 monorepo
Monorepo 是具有明确定义的关系包含多个不同项目的单个存储库。
我们在公司做项目时,可以将不同仓库的项目,通过 Monorepo 合并到一个仓库中,方便管理。
利用 Monorepo,也可以将一个巨大的单一项目,拆分为功能独立的多个子模块,提高项目维护性。
如何配置 Monorepo
使用 pnpm 配置 Monorepo 非常简单,只需要在项目根目录创建一个 pnpm-workspace.yaml 文件,即可支持 Monorepo。
packages:
- 'packages/*'
- 'apps/*'
这表示:
packages/
目录下的所有子目录都是工作空间包apps/
目录下的所有子目录也是工作空间包
目录空间根据需求定义,没有严格要求。
如何管理多仓库
如果要新建仓库,可以在我们上一步在 pnpm-workspace.yaml 指定的目录下,新建一个文件夹,然后在内部执行 pnpm init
,一个新的工作空间就创建成功了。
cd apps
mkdir web-app
cd web-app
pnpm init
典型的Monorepo结构如下:
my-monorepo/
├── pnpm-workspace.yaml
├── package.json
├── packages/
│ ├── shared/ # 共享库
│ │ ├── package.json
│ │ └── src/
│ ├── ui-components/ # UI 组件库
│ │ ├── package.json
│ │ └── src/
├── apps/
│ ├── web-app/ # 前端应用
│ │ ├── package.json
│ │ └── src/
│ ├── mobile-app/ # 移动应用
│ │ ├── package.json
│ │ └── src/
├── scripts/ # 共享脚本
├── docs/ # 文档
└── .gitignore
pnpm-workspace.yaml 配置工作空间
apps 放引用工程
packages 放公共组件、lint等文件
如果管理依赖
安装全局依赖
部分依赖可以安装到全局,所有内部项目公用,保证依赖一致性。
pnpm 可以使用 -w
或 --workspace-root
参数用于将依赖安装到 Monorepo 的根目录(全局)
pnpm add lodash -w
安装工作空间依赖
部分依赖是工作空间独有的,不需要安装到全局,因此需要在当前工作空间安装
方法就是到具体工作空间下安装即可
cd apps/web-app
pnpm add webpack
安装其他空间
Monorepo 的各个空间之间可以互相依赖,使用之前需要先安装其依赖
可以使用 pnpm add <包名>@workspace:*
假设有以下结构
monorepo/
├── packages/
│ ├── utils/ # @repo/utils
│ └── core/ # @repo/core
在 **@project/core**
中安装 **@project/utils**
作为依赖:
cd packages/core
pnpm add @repo/utils@workspace:*
这会在 packages/core/package.json
中添加:
{
"dependencies": {
"@repo/utils": "workspace:*"
}
}
结语
至此,pnpm 管理 Monorepo 的方法已经够我们日常使用,其余如发包,一般不会使用,这里就不再赘述。希望对你有用。
原文地址:https://webfem.com/post/pnpm-mono,转载请注明出处