Passer au contenu principal
Version : 10.x

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.

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

pnpm --filter <package_selector> <command>

Correspondant

--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/*).

Exemples :

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

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

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

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

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. For instance, this will run tests for all packages dependent on 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>

It may also be combined with [<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 "[&lt;since>]"

Sélectionne tous les paquets modifiés depuis le commit ou la branche spécifiés. 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

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: \!.

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>

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