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.
I selettori possono essere specificati tramite il flag --filter
(o -F
):
pnpm --filter <package_selector> <command>
Corrispondenza
--filter <nome_pacchetto>
Per selezionare un pacchetto esatto, è sufficiente specificare il suo nome (@scope/pkg
) o utilizzare un modello per selezionare un insieme di pacchetti (@scope/*
).
Esempi:
pnpm --filter "@babel/core" test
pnpm --filter "@babel/*" test
pnpm --filter "*core" test
Specificare l'ambito del pacchetto è facoltativo, quindi --filter=core
sceglierà @babel/core
se core
non viene trovato. Tuttavia, se l'area di lavoro ha più pacchetti con lo stesso nome (ad esempio, @babel/core
e @types/core
), il filtro senza ambito non selezionerà nulla.
--filter <nome_pacchetto>...
Per selezionare un pacchetto e le sue dipendenze (dirette e non dirette), aggiungi il suffisso del nome del pacchetto con i puntini di sospensione: <package_name>...
. Ad esempio, il prossimo comando eseguirà i test di foo
e tutte le sue dipendenze:
pnpm --filter foo... test
Puoi usare uno schema per selezionare un set di pacchetti radice:
pnpm --filter "@babel/preset-*..." test
--filter <nome_pacchetto>^...
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. Ad esempio, il prossimo comando eseguirà i test per tutte le dipendenze di foo
:
pnpm --filter "foo^..." test
--filter ...<nome_pacchetto>
Per selezionare un pacchetto e i suoi pacchetti dipendenti (dirette e non dirette), aggiungi il prefisso del nome del pacchetto con i puntini di sospensione: <package_name>...
. Ad esempio, questo eseguirà i test di foo
e tutti i pacchetti dipendenti da esso:
pnpm --filter ...foo test
--filter "...^<nome_pacchetto>"
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. Ad esempio, questo eseguirà i test per tutti i pacchetti dipendenti da 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>
Può anche essere combinato con [<dopo>]
. 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>
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>
--filter "[<dopo>]"
Seleziona tutti i pacchetti modificati dopo il commit/branch specificato. Può avere il suffisso o il prefisso ...
per includere dipendenze/dipendenti.
Ad esempio, il comando successivo eseguirà i test in tutti i pacchetti modificati dopo master
e su tutti i pacchetti dipendenti:
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.
Esclusione
Tutti i selettori di filtro possono funzionare come operatori di esclusione quando hanno uno "!" iniziale. In zsh (e possibilmente in altre shell), dovrebbe essere effettuato l'escaping di "!": \!
.
Ad esempio, questo eseguirà un comando in tutti i progetti tranne foo
:
pnpm --filter=!foo <cmd>
E questo eseguirà un comando in tutti i progetti che non si trovano nella cartella lib
:
pnpm --filter=!./lib <cmd>
Molteplicità
Quando i pacchetti vengono filtrati, viene preso ogni pacchetto che corrisponde ad almeno uno dei selettori. Puoi usare tutti i filtri che vuoi:
pnpm --filter ...foo --filter bar --filter baz... test
--filter-prod <modello_filtro>
Agisce allo stesso modo di --filter
ma omette le dipendenze di sviluppo (devDependencies
) quando si selezionano i progetti di dipendenza dallo spazio di lavoro.
--test-pattern <glob>
test-pattern
consente di rilevare se i file modificati sono correlati ai test. 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
--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