Filtragem
A filtragem permite restringir comandos a subconjuntos específicos de pacotes.
O pnpm suporta uma sintaxe de seletor rica para selecionar pacotes por nome ou por relação.
Os seletores podem ser especificados via --filter
(ou -F
):
pnpm --filter <package_selector> <command>
Coincidindo
--filter <nome_do_pacote>
Para selecionar um pacote exato apenas especifique o nome (@scope/pkg
) ou use um padrão para selecionar um conjunto de pacotes (@scope/*
).
Exemplos:
pnpm --filter "@babel/core" test
pnpm --filter "@babel/*" test
pnpm --filter "*core" test
Especificar o escopo do pacote é opcional, portanto --filter=core
escolherá @babel/core
se core
não for encontrado. No entanto, se o espaço de trabalho tem vários pacotes com o mesmo nome (por exemplo, @babel/core
e @types/core
), então a filtragem sem escopo não escolherá nada.
--filter <nome_do_pacote>...
Para selecionar um pacote e suas dependências (diretas e não diretas), insira o nome do pacote seguido de reticências: <nome_do_pacote>...
. Por exemplo, o comando a seguir executará testes de foo
e todas as suas dependências:
pnpm --filter foo... test
Você pode utilizar um padrão para selecionar um conjunto de pacotes raiz:
pnpm --filter "@babel/preset-*..." test
--filter <nome_do_pacote>^...
Para selecionar APENAS as dependências de um pacote (diretas e não diretas), insira as reticências mencionadas precedidas por um acento circunflexo antes do nome. Por exemplo, o próximo comando executará testes para todas as dependências de foo
:
pnpm --filter "foo^..." test
--filter ...<nome_do_pacote>
Para selecionar um pacote e suas dependências (diretas e não diretas), insira reticências seguido do nome do pacote: ...<nome_do_pacote>
. Por exemplo, isso executará os testes de foo
e de todos os pacotes dependentes dele:
pnpm --filter ...foo test
--filter "...^<nome_do_pacote>"
Para selecionar APENAS as dependências de um pacote (tanto diretas quanto não-diretas), insira reticências seguidas de um acento circunflexo antes do nome do pacote. Por exemplo, isso irá executar testes para todos os pacotes dependentes de foo
:
pnpm --filter "...^foo" test
--filter ./<glob>, --filter {<glob>}
Um padrão glob relativo ao diretório de trabalho atual correspondendo aos projetos.
pnpm --filter "./packages/**" <cmd>
Inclui todos os projetos que estão sob o diretório especificado.
Ele pode ser usado com os operadores ellipsis e chevron para selecionar dependentes/dependências também:
pnpm --filter ...{<directory>} <cmd>
pnpm --filter {<directory>}... <cmd>
pnpm --filter ...{<directory>}... <cmd>
Também pode ser combinado com [<since>]
. Por exemplo, para selecionar todos os projetos alterados dentro de um diretório:
pnpm --filter "{packages/**}[origin/master]" <cmd>
pnpm --filter "...{packages/**}[origin/master]" <cmd>
pnpm --filter "{packages/**}[origem/mestre]..." <cmd>
pnpm --filter "...{packages/**}[origin/master]..." <cmd>
Ou você pode selecionar todos os pacotes de um diretório com nomes que correspondam ao padrão fornecido:
pnpm --filter "@babel/*{components/**}" <cmd>
pnpm --filter "@babel/*{components/**}[origin/master]" <cmd>
pnpm --filter "...@babel/*{components/**}[origin/master]" <cmd>
--filter "[<desde>]"
Seleciona todos os pacotes alterados desde o commit/branch especificado. Pode ser sufixado ou prefixado com ...
para incluir dependências/dependentes.
Por exemplo, o próximo comando executará testes em todos os pacotes alterados desde master
e em quaisquer pacotes dependentes:
pnpm -- filter "... [origin/master]" teste
Excluindo
Qualquer um dos seletores de filtro pode funcionar como operadores de exclusão quando tiver um "!" à esquerda de. Em zsh (e possivelmente em outros shells), "!" deve ser escapado: \!
.
Por exemplo, isso executará um comando em todos os projetos, exceto foo
:
pnpm --filter=!foo <cmd>
E isso executará um comando em todos os projetos que não estiverem no diretório lib
:
pnpm --filter=!./lib <cmd>
Multiplicidade
Quando os pacotes são filtrados, todo pacote que corresponde a pelo menos um dos seletores é obtido. Você pode usar quantos filtros quiser:
pnpm --filter ...foo --filter bar --filter baz... test
--filter-prod <filtering_pattern>
Atua da mesma forma --filter
, mas omite devDependencies
ao selecionar projetos de dependência do espaço de trabalho.
--test-pattern <glob>
test-pattern
permite detectar se os arquivos modificados estão relacionados a testes. Se estiverem, os pacotes dependentes desses pacotes modificados não serão incluídos.
Esta opção é útil com o filtro "alterado desde". Por exemplo, o próximo comando executará testes em todos os pacotes alterados e, se as alterações estiverem no código-fonte do pacote, os testes também serão executados nos pacotes dependentes:
pnpm --filter="...[origin/master]" --test-pattern="test/*" test
--changed-files-ignore-pattern <glob>
Permite ignorar arquivos alterados por padrões glob ao filtrar projetos alterados desde o commit/branch especificado.
Exemplos de uso:
pnpm --filter="...[origin/master]" --changed-files-ignore-pattern="**/README.md" run build