过滤
过滤允许您将命令限制在特定包子集。
pnpm 支持丰富的选择器语法,用于通过名称或关系选择包。
选择器可以通过 --filter
(或 -F
)标志指定
pnpm --filter <package_selector> <command>
匹配
--filter <package_name>
要选择一个确切的包,只需指定它的名称(@scope/pkg
)或使用模式选择一组包(@scope/*
)。
示例
pnpm --filter "@babel/core" test
pnpm --filter "@babel/*" test
pnpm --filter "*core" test
指定包的范围是可选的,因此 --filter=core
将选择 @babel/core
(如果未找到 core
)。但是,如果工作区具有多个同名包(例如,@babel/core
和 @types/core
),则不带范围的过滤将不选择任何内容。
--filter <package_name>...
要选择一个包及其依赖项(直接和非直接),请在包名称后面添加省略号:<package_name>...
。例如,下一个命令将运行 foo
及其所有依赖项的测试
pnpm --filter foo... test
您可以使用模式选择一组根包
pnpm --filter "@babel/preset-*..." test
--filter <package_name>^...
要仅选择一个包的依赖项(直接和非直接),请在名称后面添加上述省略号,前面加上一个尖括号。例如,下一个命令将运行 foo
的所有依赖项的测试
pnpm --filter "foo^..." test
--filter ...<package_name>
要选择一个包及其依赖包(直接和非直接),请在包名称前面添加省略号:...<package_name>
。例如,这将运行 foo
及其所有依赖它的包的测试
pnpm --filter ...foo test
--filter "...^<package_name>"
要仅选择一个包的依赖者(直接和非直接),请在包名称前面添加省略号,后面加上一个尖括号。例如,这将运行所有依赖 foo
的包的测试
pnpm --filter "...^foo" test
--filter ./<glob>
, --filter {<glob>}
相对于当前工作目录的 glob 模式,匹配项目。
pnpm --filter "./packages/**" <cmd>
包括指定目录下的所有项目。
它可以与省略号和尖括号运算符一起使用,以选择依赖者/依赖项
pnpm --filter ...{<directory>} <cmd>
pnpm --filter {<directory>}... <cmd>
pnpm --filter ...{<directory>}... <cmd>
它也可以与 [<since>]
结合使用。例如,要选择目录中所有已更改的项目
pnpm --filter "{packages/**}[origin/master]" <cmd>
pnpm --filter "...{packages/**}[origin/master]" <cmd>
pnpm --filter "{packages/**}[origin/master]..." <cmd>
pnpm --filter "...{packages/**}[origin/master]..." <cmd>
或者您可以选择目录中所有名称与给定模式匹配的包
pnpm --filter "@babel/*{components/**}" <cmd>
pnpm --filter "@babel/*{components/**}[origin/master]" <cmd>
pnpm --filter "...@babel/*{components/**}[origin/master]" <cmd>
--filter "[<since>]"
选择自指定提交/分支以来已更改的所有包。可以添加或删除 ...
以包含依赖项/依赖者。
例如,下一个命令将在自 master
以来已更改的所有包以及任何依赖包中运行测试
pnpm --filter "...[origin/master]" test
--fail-if-no-match
如果您希望 CLI 在没有包匹配过滤器时失败,请使用此标志。
排除
任何过滤器选择器在前面有 "!" 时都可以用作排除运算符。在 zsh(以及可能的其他 shell)中,"!" 应该被转义:\!
。
例如,这将在所有项目中运行命令,除了 foo
pnpm --filter=!foo <cmd>
这将在所有不在 lib
目录下的项目中运行命令
pnpm --filter=!./lib <cmd>
多重性
当过滤包时,将获取匹配至少一个选择器的每个包。您可以使用任意数量的过滤器
pnpm --filter ...foo --filter bar --filter baz... test
--filter-prod <filtering_pattern>
与 --filter
的作用相同,但在从工作区选择依赖项项目时会省略 devDependencies
。
--test-pattern <glob>
test-pattern
允许检测修改的文件是否与测试相关。如果是,则不会包含此类修改包的依赖包。
此选项与“自更改以来”过滤器一起使用很有用。例如,下一个命令将在所有已更改的包中运行测试,如果更改在包的源代码中,则也会在依赖包中运行测试
pnpm --filter="...[origin/master]" --test-pattern="test/*" test
--changed-files-ignore-pattern <glob>
允许在过滤自指定提交/分支以来已更改的项目时,通过 glob 模式忽略已更改的文件。
用法示例
pnpm --filter="...[origin/master]" --changed-files-ignore-pattern="**/README.md" run build