monorepo 构建
什么是 monorepo
monorepo 可以管理在一个工作区管理多个项目
初始化
- 使用
pnpm init创建package.json - 根目录的
package文件中写入:"private": true - 根目录创建
.npmrc文件,写入:shamefully-hoist = true # 关闭 pnpm 幽灵依赖 - 根目录创建
pnpm-workspace.yaml文件,将项目添加进组中:
yaml
packages:
- common # 公共包
- package-A # 包 1
- package-B # 包 2安装公共依赖
e.g.: pnpm i typescript -w
工作区文件共享
通过指令:pnpm install @monorepoSpace/common -w 来共享依赖
json
{
"name": "@monorepoSpace/common"
}json
{
"dependencies": { "@monorepoSpace/common": "workspace:*" }
}monorepo 分包示例
示例为前端监测库:web-see

如图所示仓库分了几个包:
- @websee/common
- @websee/core
- @websee/performance
- @websee/recordscreen
- @websee/types
- @websee/utils
在最顶层的 pnpm-workspace.yaml 中设置:
yaml
packages:
- 'packages/*'由于 core 这个分包是核心,引用了三个子包,所以在它的目录下的 package 设置:
json
{
"dependencies": {
"@websee/common": "workspace:*",
"@websee/types": "workspace:*",
"@websee/utils": "workspace:*"
}
}如此,就可以在 core 包的代码下使用其他包的内容:
js
import { SDK_VERSION, SDK_NAME, EVENTTYPES } from '@websee/common';
import { InitOptions, VueInstance, ViewModel } from '@websee/types';