Filtraggio
Il filtraggio consente di limitare i comandi a specifici sottoinsiemi di pacchetti.
pnpm supporta una ricca sintassi di selettori per la selezione dei pacchetti per nome o per relazione.
Selectors may be specified via the --filter (or -F) flag:
pnpm --filter <package_selector> <command>
Corrispondenza#
--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/*).
Esempi:
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
Puoi usare uno schema per selezionare un set di pacchetti radice:
pnpm --filter "@babel/preset-*..." test
--filter <package_name>^...#
Per selezionare SOLO le dipendenze di un pacchetto (sia diretto che non diretto),
aggiungi al nome il suffisso con i suddetti puntini di sospensione preceduti da un gallone. 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>"#
Per selezionare SOLO i dipendenti di un pacchetto (sia diretti che non diretti), prefissare il nome del pacchetto
con un'ellissi seguita da un gallone. For instance, this will
run tests for all packages dependent on foo:
pnpm --filter "...^foo" test
--filter ./<glob>, --filter {<glob>}#
Un modello glob relativo ai progetti corrispondenti della cartella di lavoro corrente.
pnpm --filter "./packages/**" <cmd>
Include tutti i progetti che si trovano nella cartella specificata.
Può essere utilizzato con gli operatori puntini di sospensione e gallone per selezionare anche dipendenti/dipendenze:
pnpm --filter ...{<directory>} <cmd>
pnpm --filter {<directory>}... <cmd>
pnpm --filter ...{<directory>}... <cmd>
It may also be combined with [<since>]. Ad esempio, per selezionare tutti i progetti modificati all'interno di una cartella:
pnpm --filter "{packages/**}[origin/master]" <cmd>
pnpm --filter "...{packages/**}[origin/master]" <cmd>
pnpm --filter "{packages/**}[origin/master]..." <cmd>
pnpm --filter "...{packages/**}[origin/master]..." <cmd>
The pattern language is the usual one: * and ? match within one path
segment, ** crosses segments, and a character class such as [ab] matches one
of the listed characters. Neither * nor ? matches a name that begins with a
dot, so packages/* skips packages/.cache. Name a dot-prefixed directory
explicitly to select it.
Oppure puoi selezionare tutti i pacchetti da una cartella con nomi che corrispondono al modello:
pnpm --filter "@babel/*{components/**}" <cmd>
pnpm --filter "@babel/*{components/**}[origin/master]" <cmd>
pnpm --filter "...@babel/*{components/**}[origin/master]" <cmd>
legacyDirFiltering#
- Default: false
- Type: Boolean
{<dir>} is matched as a glob pattern: {packages/*} selects the projects one
level below packages/, and it takes a ** to reach deeper. Set
legacyDirFiltering to true in pnpm-workspace.yaml to restore the older
behavior, where the selector named a directory and matched every project in
the subtree below it:
legacyDirFiltering: true
The setting only applies to the selectors you write. The workspace-root
selectors pnpm generates for itself (the !{<workspace-root>} a recursive
run / exec / add / test appends, and the {<workspace-root>} that
--workspace-root appends) are always matched as globs.
--filter "[<since>]"#
Seleziona tutti i pacchetti modificati dopo il commit/branch specificato. 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
Since v12.7.0, <since> is compared against the commit where the current
branch forked from it (the merge base), so projects changed only by newer
commits on <since> are not selected. Uncommitted changes are still included.
In a shallow clone that lacks the merge base, pnpm compares against <since>
directly.
This selector requires Git 2.24 or newer.
A project also counts as changed when:
- a version it takes from a catalog changes in
pnpm-workspace.yaml; - files were moved out of it and git detects the move as a rename.
--fail-if-no-match#
Use this flag if you want the CLI to fail if no packages have matched the filters.
You may also set this permanently with a failIfNoMatch setting.
--no-fail-if-no-match overrides failIfNoMatch: true for one command.
Esclusione#
Tutti i selettori di filtro possono funzionare come operatori di esclusione quando hanno uno
"!" iniziale. 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 in the lib
directory or below it:
pnpm --filter='!./lib/**' <cmd>
Since v12.7.0, selectors are evaluated in the order they are given, so a later inclusion can bring back a project that an earlier exclusion removed:
pnpm --filter "!./packages/**" --filter @scope/core <cmd>
Molteplicità#
When packages are filtered, every package is taken that matches at least one of the inclusion selectors, unless a later exclusion removes it. When the first selector is an exclusion, filtering starts from every project in the workspace. Puoi usare tutti i filtri che vuoi:
pnpm --filter ...foo --filter bar --filter baz... test
--filter-prod <filtering_pattern>#
Acts the same as --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.
Se lo sono, i pacchetti dipendenti di tali pacchetti modificati non sono inclusi.
Questa opzione è utile con il filtro "modificato da". Ad esempio, il prossimo comando eseguirà i test in tutti i pacchetti modificati e, se le modifiche sono nel del pacchetto, i test verranno eseguiti anche nei pacchetti dipendenti:
pnpm --filter="...[origin/master]" --test-pattern="test/*" test
To set it for every command, use the testPattern setting in
pnpm-workspace.yaml:
- Default: []
- Type: string[]
--changed-files-ignore-pattern <glob>#
Consente di ignorare i file modificati dai modelli glob durante il filtraggio per i progetti modificati dal commit/ramo specificato.
Esempio di utilizzo:
pnpm --filter="...[origin/master]" --changed-files-ignore-pattern="**/README.md" run build
To set it for every command, use the changedFilesIgnorePattern setting in
pnpm-workspace.yaml:
- Default: []
- Type: string[]