跳到主内容
Version: Next

过滤

添加于:v2.13.0

过滤允许您将命令限制于包的特定子集。

pnpm 支持丰富选择器语法,可以通过名称或关系选择包。

可以通过 --filter 标志指定选择器:

pnpm <command> --filter <package_selector>

匹配

--filter <package_name>

添加于:v2.13.0

选择一个精确的包, 只用指定它的名称 (@scope/pkg) 或使用 通配符选择一组包 (@scope/*)。

示例:

pnpm test --filter "@babel/core"
pnpm test --filter "@babel/*"
pnpm test --filter "*core"

从 v6.19.0 开始:

指定包的范围是可选的,因此如果未找到 core--filter=core 将选择 @babel/core。 但是,如果工作区有多个同名的包(例如, @babel/core@types/core),则没有范围的过滤将不会选择任何内容。

--filter <package_name>...

添加于:v2.13.0

要选择一个软件包及其依赖项 (直接和非直接) 在包名称后加上省略号: <package_name>...。 例如,下一个命令将运行 foo 及其所有依赖的测试:

pnpm test --filter foo...

您可以使用通配符来选择一组根目录包:

pnpm test --filter "@babel/preset-*..."

--filter <package_name>^...

添加于:v4.4.0

要只选择一个包的依赖项(直接和非直接), 在包名前添加一个山形符号加上上面提到的省略号。 例如,下面的命令将运行所有 foo的依赖项的测试:

pnpm test --filter "foo^..."

--filter ...<package_name>

添加于:v2.14.0

要选择一个包及被其依赖的包(直接和非直接),在包名前添加一个省略号: ...<package_name>。 例如,这将运行 foo 以及依赖于它的所有包的测试:

pnpm test --filter ...foo

--filter "...^<package_name>"

添加于:v4.4.0

要只选择一个包的被依赖项 (直接和非直接) ,在包名前添加一个省略号与山形符号。 例如,这将运行所有依赖于 foo 的包的测试:

pnpm test --filter "...^foo"

--filter ./<directory>

添加于:v2.15.0

要仅选择指定目录下的包,您可以指定任何相对路径,路径通常为 POSIX 格式。

--filter {<directory>}

添加于:v4.7.0

包括指定目录下的所有项目。

也可以使用省略号与山形符号来选择依赖项与被依赖项:

pnpm <cmd> --filter ...{<directory>}
pnpm <cmd> --filter {<directory>}...
pnpm <cmd> --filter ...{<directory>}...

也可以与 [<since>] 合并使用。 例如,要在某个目录中选择所有已更改的项目:

pnpm <cmd> --filter "{packages}[origin/master]"
pnpm <cmd> --filter "...{packages}[origin/master]"
pnpm <cmd> --filter "{packages}[origin/master]..."
pnpm <cmd> --filter "...{packages}[origin/master]..."

或者你可以从某个目录中选择符合给定的通配符的所有包:

pnpm <cmd> --filter "@babel/*{components}"
pnpm <cmd> --filter "@babel/*{components}[origin/master]"
pnpm <cmd> --filter "...@babel/*{components}[origin/master]"

--filter "[<since>]"

添加于:v4.6.0

选择自指定的 commit / branch 以来有更改的所有包。 可以在前后添加 ... 来包括依赖项/被依赖项:

例如,以下命令将运行自 master 以来所有变动过的包以及被其依赖的包的测试:

pnpm test --filter "...[origin/master]"

排除

添加于:v5.8.0

任何过滤规则选择器都可以作为排除项,只要在开头添加一个"!"。 在 zsh (可能还有其他shells) 中, "!" 应转义: \!.

例如,这将在除 foo 以外的所有项目中运行一个命令:

pnpm <cmd> --filter=!foo

然后这将在所有不在 lib目录下的项目中运行一个命令:

pnpm <cmd> --filter=!./lib

多重性

当包被过滤时,每个都会被匹配到至少一个选择器。 你可以使用无限数量的过滤器:

pnpm test --filter ...foo --filter bar --filter baz...

--filter-prod <filtering_pattern>

添加于:v6.2.0

在从工作区选择依赖项时,会忽略 devDependencies,其余行为与 --filter 一致。

--test-pattern <glob>

添加于:v5.14.0

test-pattern 允许检测修改后的文件是否与测试相关。 如果是这样,经这种修改的包的被依赖包并不包括在内。

此选项对于 “changed since” 过滤器非常有用。 例如,以下命令将在所有更改的包中运行测试, 如果更改在包的源代码中,测试也将在被依赖的包中运行:

pnpm --filter="...[origin/master]" --test-pattern="test/*" test

--changed-files-ignore-pattern <glob>

添加于:v6.16.0

允许在过滤自指定提交/分支以来更改的项目时通过 glob 模式忽略更改的文件。

用法示例:

pnpm --filter="...[origin/master]" --changed-files-ignore-pattern="**/README.md" run build