Фільтрування
Фільтрування дозволяє обмежити команди певними підмножинами пакунків.
pnpm підтримує потужний синтаксис селектора для вибору пакунків за назвою або за звʼязком.
Селектори можна вказати за допомогою прапорця --filter
(або -F
):
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>...
. Наприклад, наступна команда запустить тести для foo
і всіх його залежностей:
pnpm --filter foo... test
Ви можете використати шаблон для вибору набору кореневих пакунків:
pnpm --filter "@babel/preset-*..." test
--filter <package_name>^...
Щоб вибрати ТІЛЬКИ залежності пакунка (як прямі, так і непрямі), додайте до назви пакунка вищезгадану трикрапку, що передує шеврону. Наприклад, наступна команда запустить тести для всіх залежностей foo
:
pnpm --filter "foo^..." test
--filter ...<package_name>
Щоб вибрати пакунок і залежні від нього пакунки (прямі й непрямі), додайте до назви пакунка трикрапку: ...<package_name>
. Наприклад, буде запущено тести foo
і всіх залежних від нього пакунків:
pnpm --filter ...foo test
--filter "...^<package_name>"
Щоб вибрати ЛИШЕ залежні пакунки (як прямі, так і непрямі), додайте до назви пакунка трикрапку, за якою слідує шеврон. Наприклад, буде запущено тести для всіх пакунків, залежних від 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>]"
Вибирає всі пакунки, змінені після вказаного коміту/гілки. Може мати суфікс або префікс ...
для включення залежностей/залежних.
Наприклад, наступна команда запустить тести у всіх змінених пакунках, починаючи з master
, а також у всіх залежних пакунках:
pnpm --filter "...[origin/master]" test
--fail-if-no-match
Використовуйте цей прапорець, якщо ви хочете, щоб CLI завершив роботу, якщо жоден пакунок не відповідає фільтр ам.
Виключення
Будь-який з селекторів фільтра може працювати як оператор виключення, якщо перед ним стоїть символ «!». У 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 при фільтруванні змінених проєктів після вказаного комміту/гілки.
Приклад використання:
pnpm --filter="...[origin/master]" --changed-files-ignore-pattern="**/README.md" run build