logo
火山博客
导航

pnpm Workspace 命令指南

2024-11-22
13阅读时间4分钟

pnpm Workspace 是一个强大的 monorepo 管理工具,它允许我们在一个仓库中管理多个相互关联的项目。本指南将帮助你掌握日常开发中最常用的 workspace 命令。

为什么选择 pnpm Workspace?

  • 更快的依赖安装速度
  • 更少的磁盘空间占用
  • 简化的包间依赖管理
  • 统一的版本控制

1. 工作空间初始化

创建工作空间

Bash
mkdir my-project && cd my-project
pnpm init
echo   - 'packages/*' >> pnpm-workspace.yaml

### 创建子包
```bash
mkdir -p packages/core packages/vue

2. 依赖安装命令

根目录依赖安装

Bash
# 安装开发依赖到根目录
pnpm add -Dw typescript eslint jest
# 这些工具在所有子包中都可用

# 安装生产依赖到根目录
pnpm add -w lodash

特定包依赖安装

Bash
# 为特定包安装依赖
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

包之间的依赖

Json
//在 package.json 中设置工作空间依赖
// pnpm add @my-scope/core@workspace:*
{
  "dependencies": {
    "@my-scope/core": "workspace:*"
  }
}

3. 依赖移除命令

Bash
# 从根目录移除依赖
pnpm remove typescript -w

# 从特定包移除依赖
pnpm remove lodash --filter @my-scope/core

4. 运行脚本命令

运行所有包的脚本

Bash
# 运行所有包的 build 脚本
pnpm -r build

# 并行运行
pnpm -r --parallel build

# 从指定包开始运行
pnpm -r --filter @my-scope/core build

运行特定包的脚本

Bash
# 运行单个包的脚本
pnpm --filter @my-scope/core build

# 运行多个包的脚本
pnpm --filter "@my-scope/*" build

5. 发布命令

Bash
# 发布所有包
pnpm -r publish

# 发布特定包
pnpm publish --filter @my-scope/core

# 使用 changeset 发布
pnpm changeset publish

6. 其他常用命令

清理命令

Bash
# 清理所有 node_modules
pnpm -r clean

# 清理特定包的构建输出
pnpm --filter @my-scope/core clean

更新依赖

Bash
# 更新所有依赖
pnpm up

# 更新特定包的依赖
pnpm up --filter @my-scope/core

7. Filter 语法示例

Bash
# 基本用法
--filter <package_name>

# 使用通配符
--filter "@my-scope/*"

# 依赖关系过滤
--filter {packages/a}...  # 包 a 及其所有依赖项
--filter ...{packages/a}  # 依赖包 a 的所有包

# 从 git 提交过滤
--filter "[origin/main]"  # 自上次发布以来已更改的包

8. 常见的工作空间配置

配置文件 pnpm-workspace.yaml

Json
packages:
  # 所有 packages 目录下的包
  - 'packages/*'
  # 排除特定目录
  - '!**/test/**'
  # 包含其他目录
  - 'components/**'

配置文件 package.json

Json
{
  "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"
  }
}

9. 最佳实践

依赖管理

  • 将开发工具(typescript, jest 等)安装在根目录
  • 将业务依赖安装在具体的包中
  • 使用 workspace:* 进行包间依赖
  • 使用 peerDependencies 声明同级依赖

版本控制

  • 提交 pnpm-lock.yaml
  • 提交 pnpm-workspace.yaml
  • 使用 .npmrc 配置包管理器

脚本命名

  • 保持所有包中相同功能的脚本名称一致
  • 在根目录提供统一的命令入口
2024 © Powered by
hsBlog
|
后台管理