pnpm 通过 pnpm-workspace.yaml 文件声明工作区范围,使用 glob 模式匹配子包目录。例如配置 packages: ['packages/*', 'apps/*'] 后,所有匹配目录中包含 package.json 的文件夹都会成为工作区成员。根目录的 package.json 可定义工作区级脚本和共享开发依赖。
工作区内的包之间可通过 workspace: 协议相互依赖,如 "@myorg/utils": "workspace:*"。该协议确保开发期间始终使用本地工作区的最新版本,发布时自动替换为实际版本号。pnpm 还支持 workspace:^ 和 workspace:~ 等变体,用于指定兼容版本范围。
pnpm 的 --filter(简写 -F)参数提供强大的包筛选能力,支持按名称、路径、依赖关系和 Git 变更检测进行精准操作。常用语法包括:-F @scope/pkg 选中指定包,-F pkg... 选中包及其所有依赖,-F ...pkg 选中包及其所有依赖者,-F "...[origin/main]" 选中自指定分支以来有变更的包。配合 -r(recursive)参数可在所有工作区中批量执行命令,--parallel 可并行运行以加速构建和测试。