Featured image of post Como configurar o GitLab Private NPM Registry? Melhores práticas para gestão de múltiplos pacotes e permissões

Como configurar o GitLab Private NPM Registry? Melhores práticas para gestão de múltiplos pacotes e permissões

Resolva problemas de configuração do GitLab Private NPM Registry, incluindo lógica .npmrc, gestão de múltiplos pacotes e resolução de erros 404, com melhores práticas para unificação de Registry.

Você está tentando usar Pacotes Privados no projeto da sua empresa, mas está preso na configuração do .npmrc?

Por que você ainda recebe 404 Not Found mesmo depois de configurar o Token?

Quando a empresa tem várias equipes e vários pacotes (por exemplo, @frontend, @backend), como você gerencia o .npmrc com elegância?

Derrubando os dois mitos do .npmrc

Para entender o .npmrc, você precisa primeiro entender como ele funciona.

Simplesmente, sua lógica central são apenas duas coisas: Mapeamento de Escopo (Scope Mapping) e Autenticação.

1. Mapeamento de Escopo (Scope Mapping)

Isso diz ao npm: Quando você vir um pacote começando com @company, não vá para o npmjs.org oficial, vá para o nosso GitLab Registry especificado.

@company:registry=https://gitlab.com/api/v4/groups/100/-/packages/npm/

2. Autenticação (Authentication)

Com o endereço, você também precisa de uma chave. A chave é o seu AuthToken.

Aqui está uma regra super crucial: A URL do Registry e o caminho do AuthToken devem “corresponder exatamente”.

# ✅ Correto: O caminho é exatamente o mesmo que o registry definido acima
//gitlab.com/api/v4/groups/100/-/packages/npm/:_authToken=${GITLAB_TOKEN}

# ❌ Incorreto: Caminho incompatível, isso causará falha de permissão
//gitlab.com/api/v4/:_authToken=${GITLAB_TOKEN}

Muitas pessoas falham na configuração muitas vezes porque o caminho tem uma barra extra ou falta um nível.

Inferno de Dependências e Erros 404

A situação mais dolorosa é: Você instala o pacote A, que depende do pacote B (também privado), e então o npm cospe um 404 Not Found.

Por que isso acontece? Isso é porque quando o npm resolve dependências, se não houver uma relação correta, ele se perde.

Especialmente quando você tem dois Escopos diferentes (por exemplo, @team-a e @team-b) em diferentes Grupos do GitLab, o .npmrc torna-se extremamente complexo e difícil de manter. Além disso, diferentes Registries podem precisar de diferentes Tokens, apenas gerenciar essas variáveis de ambiente é exaustivo.

Existe uma maneira mais inteligente?

Solução Recomendada: Unified Download Group Registry e Independent Publish Project Registry

Registry Descrição
Group Registry Para poder unificar o download de todos os pacotes, unifique a configuração do Group Registry para baixar todos os pacotes sob este Grupo do Gitlab.
Project Registry Para permissões durante a publicação, cada projeto pode configurar seu próprio Project Registry para publicar.

Por que fazer isso?

Razão Descrição
Instalação Simples Pode instalar e baixar facilmente todos os pacotes no mesmo grupo.
Publicação Simples Pode publicar pacotes facilmente em seus respectivos projetos, evitando que diferentes pacotes publiquem no mesmo Registry; cada projeto tem seu próprio Registry.
Gestão de Token Fácil Seja no computador do desenvolvedor ou no ambiente CI/CD, só precisa manter um conjunto de GITLAB_NPM_TOKEN.
Evitar Erros de Dependência Todos os pacotes privados estão no mesmo lugar, o npm definitivamente os encontrará.

Configuração em Ação

Você pode copiar diretamente este modelo:

Lembre-se de entregar a tarefa de proteger o Token às variáveis de ambiente, absolutamente não codifique o Token no código!

# .npmrc
# @company scope usa registry de nível de grupo
# Todos os pacotes @company/* serão instalados a partir deste registry
@company:registry=https://gitlab.com/api/v4/groups/YOUR_GROUP_ID/-/packages/npm/

# Configuração de autenticação do GitLab npm registry
# Usar token de autenticação comum do gitlab.com (cobre todas as solicitações de nível de grupo e projeto)
//gitlab.com/api/v4/groups/YOUR_GROUP_ID/-/packages/npm/:_authToken=${GITLAB_NPM_TOKEN}
# Usar registry do projeto para publicar pacotes
//gitlab.com/api/v4/projects/YOUR_PROJECT_ID/packages/npm/:_authToken=${GITLAB_NPM_TOKEN}


# Outros pacotes públicos ainda vão para o registry oficial
registry=https://registry.npmjs.org/

Configure publishConfig no package.json para publicar o pacote no GitLab Project Registry correspondente.

{
  "name": "@company/my-package",
  "publishConfig": {
    "@company:registry": "https://gitlab.com/api/v4/projects/YOUR_PROJECT_ID/packages/npm/"
  }
}

Conclusão

Através da estratégia de “Unified Download Group Registry” e “Independent Publish Project Registry”, podemos reduzir significativamente os custos de manutenção e tornar o fluxo de desenvolvimento mais suave.

Objetivo Descrição
Correspondência Precisa O mapeamento de escopo e o caminho do Token devem corresponder exatamente
Segurança em Primeiro Lugar Use a variável de ambiente ${GITLAB_NPM_TOKEN} para gerenciar informações privadas
Gestão Centralizada Priorize o uso do Grupo GitLab unificado para baixar todos os pacotes privados da empresa
Publicação Independente Priorize o uso do Projeto GitLab independente para publicar os respectivos pacotes privados, gerenciando pacotes de forma independente para evitar o caos

Dominando essas lógicas, o GitLab NPM Registry será um assistente poderoso no processo de desenvolvimento da sua empresa!

All rights reserved,未經允許不得隨意轉載
Criado com Hugo
Tema Stack desenvolvido por Jimmy