如何解决pnpm filter命令执行单个嵌套工作区build脚本报错问题?
解决pnpm过滤执行build脚本报错"No projects matched the filters"的问题
我正在使用一个基于pnpm的仓库,此前用过npm和yarn工作区,但对pnpm不熟悉。仓库的工作区包都在packages目录下的子层级中,我需要对packages/starter/example目录下的包执行build脚本。参考pnpm过滤文档后,我执行了以下命令:
pnpm --filter packages/starter/example run build
但命令执行失败,报错信息如下:
pnpm --filter packages/starter/example run build No projects matched the filters in "/home/me/myproject"
我已经确认目录路径正确,该目录下的文件列表为:
$ ls packages/starter/example/ CHANGELOG.md LICENSE README.md next-env.d.ts next.config.js node_modules package.json public src tsconfig.json
解决方案
1. 检查根目录的pnpm-workspace.yaml配置
pnpm需要通过pnpm-workspace.yaml识别工作区中的包。打开根目录的这个文件,确认其中的packages数组包含packages/starter/example或匹配它的通配符规则,比如:
packages: - 'packages/**' # 匹配packages下所有子目录的包 # 或者明确指定 - 'packages/starter/example'
如果该路径不在配置中,pnpm会将其视为工作区外的目录,导致过滤匹配失败。
2. 使用包名代替路径过滤
查看packages/starter/example/package.json中的name字段(例如可能是@solana/wallet-adapter-example),直接用包名作为过滤条件:
pnpm --filter @solana/wallet-adapter-example run build
pnpm的过滤功能优先识别包名,这种方式比路径匹配更可靠,尤其是在嵌套工作区结构中。
3. 调整路径过滤的语法
尝试给路径加上相对前缀./,或者用引号包裹路径避免shell解析问题:
pnpm --filter ./packages/starter/example run build # 或者用引号 pnpm --filter "packages/starter/example" run build
部分环境下,不加相对前缀的路径可能无法被pnpm正确识别为工作区内的包路径。
4. 更新pnpm到最新稳定版
不同版本的pnpm过滤语法可能存在差异,升级到最新版本可以避免一些兼容性问题:
pnpm add -g pnpm@latest
内容的提问来源于stack exchange,提问作者mikemaccana
相关产品推荐
相关产品推荐

