Фильтрация
Фильтрация позволяет ограничить команды определенными подмножествами пакетов.
pnpm поддерживает расширенный синтаксис селектора для выбора пакетов по имени или по отношению.
Selectors may be specified via the --filter
(or -F
) flag:
pnpm --filter <package_selector> <command>
Соответствие
--filter <package_name>
To select an exact package, just specify its name (@scope/pkg
) or use a
pattern to select a set of packages (@scope/*
).
Примеры:
pnpm --filter "@babel/core" test
pnpm --filter "@babel/*" test
pnpm --filter "*core" test
Specifying the scope of the package is optional, so --filter=core
will pick @babel/core
if core
is not found.
However, if the workspace has multiple packages with the same name (for instance, @babel/core
and @types/core
),
then filtering without scope will pick nothing.
--filter <package_name>...
To select a package and its dependencies (direct and non-direct), suffix the
package name with an ellipsis: <package_name>...
. For instance, the next
command will run tests of foo
and all of its dependencies:
pnpm --filter foo... test
Вы можете использовать шаблон для выбора набора корневых пакет ов:
pnpm --filter "@babel/preset-*..." test
--filter <package_name>^...
Чтобы выбрать ТОЛЬКО зависимости пакета (как прямые, так и непрямые),
добавьте к имени вышеупомянутое многоточие, которому предшествует шеврон. 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>"
Чтобы выбрать ТОЛЬКО зависимые пакеты (прямые и непрямые), добавьте к имени пакета префикс
с многоточием, за которым следует шеврон. For instance, this will
run tests for all packages dependent on 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>
It may also be combined with [<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>]"
Выбирает все измененные пакеты с момента указанного 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.
Исключения
Любой из селекторов фильтра может работать как оператор исключения, если перед ним стоит "!". 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>
Множественность
Когда пакеты фильтруются, берется каждый пакет, который соответствует хотя бы одному из селекторов. Вы можете использовать столько фильтров, сколько хотите:
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.
Если они есть, то зависимые пакеты таких измененных пакетов не включаются.
Этот параметр полезен с фильтром «изменилось с» (дата, время). Например, следующая команда запустит тесты во всех измененных пакетах, а если изменения находятся в исходном коде пакета, тесты будут запущены и в зависимых пакетах:
pnpm --filter="...[origin/master]" --test-pattern="test/*" test
--changed-files-ignore-pattern <glob>
Позволяет игнорировать измененные файлы по шаблонам glob при фильтрации измененных проектов, начиная с указанного commit/branch.
Пример использования:
pnpm --filter="...[origin/master]" --changed-files-ignore-pattern="**/README.md" run build