Passa al contenuto principale
Versione: 8.x

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

Added in: v8.13.1

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