跳到主内容
Version: 6.x

过滤

添加于: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]"

多重性

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

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

排除

Added in: v5.8.0

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

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

pnpm <cmd> --filter=!foo

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

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

--filter-prod <filtering_pattern>

添加于:v6.2.0

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

--test-pattern <glob>

添加于:v5.14.0

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

This option is useful with the "changed since" filter. For instance, the next command will run tests in all changed packages, and if the changes are in the source code of the package, tests will run in the dependent packages as well:

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