Перейти до основного змісту
Версія: 9.x

Фільтрування

Фільтрування дозволяє обмежити команди певними підмножинами пакунків.

pnpm підтримує потужний синтаксис селектора для вибору пакунків за назвою або за звʼязком.

Selectors may be specified via the --filter (or -F) flag:

pnpm --filter <package_selector> <command>

Зіставлення

--filter &lt;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 &lt;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 &lt;package_name>^...

Щоб вибрати ТІЛЬКИ залежності пакунка (як прямі, так і непрямі), додайте до назви пакунка вищезгадану трикрапку, що передує шеврону. For instance, the next command will run tests for all of foo's dependencies:

pnpm --filter "foo^..." test

--filter ...&lt;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 "...^&lt;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 "[&lt;since>]"

Вибирає всі пакунки, змінені після вказаного коміту/гілки. 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

Використовуйте цей прапорець, якщо ви хочете, щоб CLI завершив роботу, якщо жоден пакунок не відповідає фільтрам.

Виключення

Будь-який з селекторів фільтра може працювати як оператор виключення, якщо перед ним стоїть символ «!». 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 &lt;filtering_pattern>

Acts the same a --filter but omits devDependencies when selecting dependency projects from the workspace.

--test-pattern &lt;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 &lt;glob>

Дозволяє ігнорувати змінені файли за шаблонами glob при фільтруванні змінених проєктів після вказаного комміту/гілки.

Приклад використання:

pnpm --filter="...[origin/master]" --changed-files-ignore-pattern="**/README.md" run build