Skip to content

Corepack

Adicionado em: v16.9.0, v14.19.0

[Estável: 1 - Experimental]

Estável: 1 Estabilidade: 1 - Experimental

Corepack é uma ferramenta experimental para ajudar no gerenciamento de versões de seus gerenciadores de pacotes. Ele expõe proxies binários para cada gerenciador de pacotes suportado que, quando chamados, identificarão qual gerenciador de pacotes está configurado para o projeto atual, farão o download, se necessário, e finalmente o executarão.

Apesar do Corepack ser distribuído com instalações padrão do Node.js, os gerenciadores de pacotes gerenciados pelo Corepack não fazem parte da distribuição do Node.js e:

  • No primeiro uso, o Corepack baixa a versão mais recente da rede.
  • Quaisquer atualizações necessárias (relacionadas a vulnerabilidades de segurança ou não) estão fora do escopo do projeto Node.js. Se necessário, os usuários finais devem descobrir como atualizar por conta própria.

Este recurso simplifica dois fluxos de trabalho principais:

  • Facilita a integração de novos colaboradores, pois eles não precisarão mais seguir processos de instalação específicos do sistema apenas para ter o gerenciador de pacotes que você deseja que eles tenham.
  • Permite garantir que todos em sua equipe usarão exatamente a versão do gerenciador de pacotes que você pretende que usem, sem que eles tenham que sincronizá-la manualmente cada vez que você precisar fazer uma atualização.

Fluxos de trabalho

Habilitando o recurso

Devido ao seu status experimental, o Corepack precisa ser explicitamente habilitado para ter qualquer efeito. Para fazer isso, execute corepack enable, que irá configurar os symlinks em seu ambiente próximo ao binário node (e sobrescrever os symlinks existentes, se necessário).

A partir deste ponto, qualquer chamada para os binários suportados funcionará sem configuração adicional. Caso você tenha um problema, execute corepack disable para remover os proxies do seu sistema (e considere abrir um problema no repositório Corepack para nos informar).

Configurando um pacote

Os proxies do Corepack encontrarão o arquivo package.json mais próximo na hierarquia do seu diretório atual para extrair sua propriedade "packageManager".

Se o valor corresponder a um gerenciador de pacotes suportado, o Corepack garantirá que todas as chamadas para os binários relevantes sejam executadas em relação à versão solicitada, fazendo o download sob demanda, se necessário, e interrompendo se não puder ser recuperado com sucesso.

Você pode usar corepack use para pedir ao Corepack que atualize seu package.json local para usar o gerenciador de pacotes de sua escolha:

bash
corepack use  # define a versão mais recente 7.x no package.json
corepack use yarn@* # define a versão mais recente no package.json

Atualizando as versões globais

Ao executar fora de um projeto existente (por exemplo, ao executar yarn init), o Corepack usará por padrão versões predefinidas que correspondem aproximadamente às versões estáveis mais recentes de cada ferramenta. Essas versões podem ser substituídas executando o comando corepack install junto com a versão do gerenciador de pacotes que você deseja definir:

bash
corepack install --global

Alternativamente, uma tag ou intervalo pode ser usado:

bash
corepack install --global pnpm@*
corepack install --global yarn@stable

Fluxo de trabalho offline

Muitos ambientes de produção não têm acesso à rede. Como o Corepack geralmente baixa as versões do gerenciador de pacotes diretamente de seus registros, isso pode entrar em conflito com esses ambientes. Para evitar que isso aconteça, chame o comando corepack pack enquanto você ainda tem acesso à rede (normalmente ao mesmo tempo em que está preparando sua imagem de implantação). Isso garantirá que os gerenciadores de pacotes necessários estejam disponíveis mesmo sem acesso à rede.

O comando pack tem várias flags. Consulte a documentação detalhada do Corepack para mais informações.

Gerenciadores de pacotes suportados

Os seguintes binários são fornecidos através do Corepack:

Gerenciador de pacotesNomes binários
Yarnyarn , yarnpkg
pnpmpnpm , pnpx

Perguntas comuns

Como o Corepack interage com o npm?

Embora o Corepack pudesse suportar o npm como qualquer outro gerenciador de pacotes, seus shims não são habilitados por padrão. Isso tem algumas consequências:

  • É sempre possível executar um comando npm dentro de um projeto configurado para ser usado com outro gerenciador de pacotes, já que o Corepack não pode interceptá-lo.
  • Embora o npm seja uma opção válida na propriedade "packageManager", a falta de shim fará com que o npm global seja usado.

Executar npm install -g yarn não funciona

O npm impede a sobreposição acidental dos binários do Corepack ao fazer uma instalação global. Para evitar este problema, considere uma das seguintes opções:

  • Não execute este comando; O Corepack fornecerá os binários do gerenciador de pacotes de qualquer forma e garantirá que as versões solicitadas estejam sempre disponíveis, portanto, não é necessário instalar os gerenciadores de pacotes explicitamente.
  • Adicione a flag --force a npm install; isso dirá ao npm que não há problema em substituir os binários, mas você apagará os do Corepack no processo. (Execute corepack enable para adicioná-los novamente.)