Перейти к основному содержимому
Версия: 7.x

Фильтрация

Фильтрация позволяет ограничить команды определенными подмножествами пакетов.

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

Исключения

Любой из селекторов фильтра может работать как оператор исключения, если перед ним стоит "!". В 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