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:
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:
corepack install --global
Alternativamente, uma tag ou intervalo pode ser usado:
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 pacotes | Nomes binários |
---|---|
Yarn | yarn , yarnpkg |
pnpm | pnpm , 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
anpm install
; isso dirá ao npm que não há problema em substituir os binários, mas você apagará os do Corepack no processo. (Executecorepack enable
para adicioná-los novamente.)