Фильтрация
Фильтрация позволяет ограничить команды определенными подмножествами пакетов.
pnpm поддерживает расширенный синтаксис селектора для выбора пакетов по имени или по отношению.
Селекторы могут быть указаны с помощью флага --filter
(или -F
):
pnpm --filter <package_selector> <command>
Соответствие
--filter <селектор пакета>
Чтобы выбрать конкретный пакет, просто укажите его имя (@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>...
. Например, следующая команда запустит тесты foo
и всех его зависимостей:
pnpm --filter foo... test
Вы можете использовать шаблон для выбора набора корневых пакетов:
pnpm --filter "@babel/preset-*..." test
--filter <селектор пакета>^...
Чтобы выбрать ТОЛЬКО зависимости пакета (как прямые, так и непрямые), добавьте к имени вышеупомянутое многоточие, которому предшествует шеврон. Например, следующая команда запустит тесты foo
и всех его зависимостей:
pnpm --filter "foo^..." test
--filter ...<селектор пакета>
Чтобы выбрать пакет и его зависимые пакеты (прямые и непрямые), добавьте к имени пакета префикс с многоточием: ...<package_name>
. Например, это запустит тесты foo
всех зависимых от него пакетов:
pnpm --filter ...foo test
--filter "...^<селектор пакета>"
Чтобы выбрать ТОЛЬКО зависимые пакеты (прямые и непрямые), добавьте к имени пакета префикс с многоточием, за которым следует шеврон. Например, это запустит тесты для всех пакетов, зависящих от 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>]"
Выбирает все измененные пакеты с момента указанного commit/branch. Может иметь суффикс или префикс ...
для включения зависимостей/зависимых.
Например, следующая команда запустит тесты во всех измененных пакетах, начиная с master
и во всех зависимых пакетах:
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.
Исключения
Любой из селекторов фильтра может работать как оператор исключения, если перед ним стоит "!". В zsh (и, возможно, в других оболочках) "!" следует экранировать: \!
.
Например, это будет выполнять команду во всех проектах, за исключением 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 при фильтрации измененных проектов, начиная с указанного commit/branch.
Пример использования:
pnpm --filter="...[origin/master]" --changed-files-ignore-pattern="**/README.md" run build