Passer au contenu principal
Version : Suivant

Filtrage

Le filtrage vous permet de restreindre les commandes à des sous-ensembles spécifiques de packages.

pnpm supporte une syntaxe de sélecteur riche pour choisir les paquets par nom ou par relation.

Les sélecteurs peuvent être spécifiés via le flag --filter (ou -F) :

pnpm --filter <package_selector> <command>

Correspondant

--filter <package_name>

Pour sélectionner un package exact, spécifiez simplement son nom (@scope/pkg) ou utilisez un paterne pour sélectionner un ensemble de paquets (@scope/*).

Exemples :

pnpm --filter "@babel/core" test
pnpm --filter "@babel/*" test
pnpm --filter "*core" test

Spécifier le scope du package est optionnel, donc --filter=core choisira @babel/core si core n'est pas trouvé. Cependant, si l'espace de travail a plusieurs packages avec le même nom (par exemple, @babel/core et @types/core), le filtrage sans scope ne choisira rien.

--filter <package_name>...

Pour sélectionner un package et ses dépendances (directes et non directes), suffixez le nom du paquet avec des points de suspension: <package_name>.... Par exemple, la commande suivante exécutera les tests de foo et toutes ses dépendances:

pnpm --filter foo... test

Vous pouvez utiliser un paterne pour sélectionner un ensemble de packages racine :

pnpm --filter "@babel/preset-*..." test

--filter <package_name>^...

Pour sélectionner UNIQUEMENT les dépendances d'un package (à la fois directes et non directes), suffixez le nom avec les points de suspension susmentionnés précédés d'un chevron. Par exemple, la commande suivante exécutera les tests de foo et toutes ses dépendances:

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

--filter ...<package_name>

Pour sélectionner un paquet et ses packages dépendants (directs et non directs), préfixez le nom du paquet avec des points de suspension : ...<package_name>. Par exemple, ça va exécuter les tests de foo et de tous les paquets qui en dépendent :

pnpm --filter ...foo test

--filter "...^<package_name>"

Pour sélectionner SEULEMENT les dépendants d'un paquet (direct et non-direct), préparez le nom du paquet avec une ellipse suivie d'un chevron. Par exemple, cela va lancer les tests pour tous les paquets dépendants du foo:

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

--filter ./<glob>, --filter {<glob>}

Un modèle de glob relatif au répertoire de travail courant correspondant aux projets.

pnpm --filter "./packages/**" <cmd>

Inclut tous les projets qui sont dans le répertoire spécifié.

Il peut également être utilisé avec les opérateurs d'ellipse et chevron pour sélectionner dépendants/dépendances :

pnpm --filter ...{<directory>} <cmd>
pnpm --filter {<directory>}... <cmd>
pnpm --filter ...{<directory>}... <cmd>

Il peut également être combiné avec [<since>]. Par exemple, pour sélectionner tous les projets modifiés dans un répertoire:

pnpm --filter "{packages/**}[origin/master]" <cmd>
pnpm --filter "...{packages/**}[origin/master]" <cmd>
pnpm --filter "{packages/**}[origin/master]..." <cmd>
pnpm --filter "...{packages/**}[origin/master]..." <cmd>

Ou vous pouvez sélectionner tous les packages d'un répertoire avec des noms correspondant au modèle donné :

pnpm --filter "@babel/*{components/**}" <cmd>
pnpm --filter "@babel/*{components/**}[origin/master]" <cmd>
pnpm --filter "...@babel/*{components/**}[origin/master]" <cmd>

--filter "[<since>]"

Sélectionne tous les paquets modifiés depuis le commit ou la branche spécifiés. Peut être suffixé ou préfixé avec ... pour inclure des dépendances/dépendantes.

Par exemple, la commande suivante va lancer les tests dans tous les paquets modifiés depuis master et sur toutes les dépendances:

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.

Excepté

N'importe lequel des sélecteurs de filtres peut fonctionner comme des opérateurs d'exclusion lorsqu'ils ont un « !» en tête. In zsh (and possibly other shells), "!" should be escaped: \!.

Dans cet exemple, ceci va lancer une commande sur tous les projets excepté pour foo:

pnpm --filter=!foo <cmd>

Et ceci va lancer une commande sur tous les projets qui ne sont pas dans le dossier lib:

pnpm --filter=!./lib <cmd>

Multiplicité

Lorsque les paquets sont filtrés, chaque paquet est pris qui correspond à au moins un des sélecteurs. Vous pouvez utiliser autant de filtres que vous le souhaitez :

pnpm --filter ...foo --filter bar --filter baz... test

--filter-prod <modèle_filtrage>

Agit de la même manière qu'un --filter mais omet devDependencies lors de la sélection des projets de dépendance depuis l'espace de travail.

--test-pattern <glob>

test-pattern allows detecting whether the modified files are related to tests. Si tel est le cas, les paquets dépendants de ces paquets modifiés ne sont pas inclus.

Cette option est utile avec le filtre "changed since". Par exemple, la prochaine commande exécutera des tests dans tous les paquets modifiés, et si les changements sont dans le code source du paquet, les tests s'exécuteront également dans les paquets dépendants :

pnpm --filter="...[origin/master]" --test-pattern="test/*" test

--changed-files-ignore-pattern <glob>

Permet d'ignorer les fichiers modifiés par les motifs de glob lors du filtrage pour les projets modifiés depuis la commit/branche spécifiée.

Exemple d'utilisation:

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