pnpm Workspace 是一个强大的 monorepo 管理工具,它允许我们在一个仓库中管理多个相互关联的项目。本指南将帮助你掌握日常开发中最常用的 workspace 命令。
mkdir my-project && cd my-project
pnpm init
echo - 'packages/*' >> pnpm-workspace.yaml
### 创建子包
```bash
mkdir -p packages/core packages/vue
# 安装开发依赖到根目录
pnpm add -Dw typescript eslint jest
# 这些工具在所有子包中都可用
# 安装生产依赖到根目录
pnpm add -w lodash
# 为特定包安装依赖
pnpm add vue --filter @my-scope/vue
pnpm add express --filter @my-scope/server
# 为多个包安装依赖
pnpm add lodash --filter "@my-scope/*"
# 安装开发依赖
pnpm add -D vitest --filter @my-scope/core
//在 package.json 中设置工作空间依赖
// pnpm add @my-scope/core@workspace:*
{
"dependencies": {
"@my-scope/core": "workspace:*"
}
}
# 从根目录移除依赖
pnpm remove typescript -w
# 从特定包移除依赖
pnpm remove lodash --filter @my-scope/core
# 运行所有包的 build 脚本
pnpm -r build
# 并行运行
pnpm -r --parallel build
# 从指定包开始运行
pnpm -r --filter @my-scope/core build
# 运行单个包的脚本
pnpm --filter @my-scope/core build
# 运行多个包的脚本
pnpm --filter "@my-scope/*" build
# 发布所有包
pnpm -r publish
# 发布特定包
pnpm publish --filter @my-scope/core
# 使用 changeset 发布
pnpm changeset publish
# 清理所有 node_modules
pnpm -r clean
# 清理特定包的构建输出
pnpm --filter @my-scope/core clean
# 更新所有依赖
pnpm up
# 更新特定包的依赖
pnpm up --filter @my-scope/core
# 基本用法
--filter <package_name>
# 使用通配符
--filter "@my-scope/*"
# 依赖关系过滤
--filter {packages/a}... # 包 a 及其所有依赖项
--filter ...{packages/a} # 依赖包 a 的所有包
# 从 git 提交过滤
--filter "[origin/main]" # 自上次发布以来已更改的包
packages:
# 所有 packages 目录下的包
- 'packages/*'
# 排除特定目录
- '!**/test/**'
# 包含其他目录
- 'components/**'
{
"name": "my-project",
"private": true,
"scripts": {
"build": "pnpm -r build",
"test": "pnpm -r test",
"clean": "pnpm -r clean",
"dev": "pnpm --filter @my-scope/web dev"
}
}