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 <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 <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 <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 ...<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>"
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 "[<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 <filtering_pattern>
Acts the same a --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.
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