Фільтрування
Фільтрування дозволяє обмежити команди певними підмножинами пакетів.
pnpm supports a rich selector syntax for picking packages by name or by relation.
Selectors may be specified via the --filter
(or -F
) flag:
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>...
. For instance, the next command will run tests of foo
and all of its dependencies:
pnpm --filter foo... test
You may use a pattern to select a set of root packages:
pnpm --filter "@babel/preset-*..." test
--filter <package_name>^...
To ONLY select the dependencies of a package (both direct and non-direct), suffix the name with the aforementioned ellipsis preceded by a chevron. For instance, the next command will run tests for all of foo
's dependencies:
pnpm --filter "foo^..." test
--filter ...<package_name>
To select a package and its dependent packages (direct and non-direct), prefix the package name with an ellipsis: ...<package_name>
. For instance, this will run the tests of foo
and all packages dependent on it:
pnpm --filter ...foo test
--filter "...^<package_name>"
To ONLY select a package's dependents (both direct and non-direct), prefix the package name with an ellipsis followed by a chevron. For instance, this will run tests for all packages dependent on foo
:
pnpm --filter "...^foo" test
--filter ./<glob>
, --filter {<glob>}
A glob pattern relative to the current working directory matching projects.
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>]"
Selects all the packages changed since the specified commit/branch. May be suffixed or prefixed with ...
to include dependencies/dependents.
For example, the next command will run tests in all changed packages since master
and on any dependent packages:
pnpm --filter "...[origin/master]" test
--fail-if-no-match
Use this flag if you want the CLI to fail if no packages have matched the filters.
Excluding
Any of the filter selectors may work as exclusion operators when they have a leading "!". In zsh (and possibly other shells), "!" should be escaped: \!
.
For instance, this will run a command in all projects except for foo
:
pnpm --filter=!foo <cmd>
And this will run a command in all projects that are not under the lib
directory:
pnpm --filter=!./lib <cmd>
Multiplicity
When packages are filtered, every package is taken that matches at least one of the selectors. You can use as many filters as you want:
pnpm --filter ...foo --filter bar --filter baz... test
--filter-prod <filtering_pattern>
Acts the same a --filter
but omits devDependencies
when selecting dependency projects from the workspace.
--test-pattern <glob>
test-pattern
allows detecting whether the modified files are related to tests. If they are, the dependent packages of such modified packages are not included.
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>
Allows to ignore changed files by glob patterns when filtering for changed projects since the specified commit/branch.
Usage example:
pnpm --filter="...[origin/master]" --changed-files-ignore-pattern="**/README.md" run build