Featured image of post Comment configurer GitLab Private NPM Registry ? Meilleures pratiques pour la gestion multi-paquets et des permissions

Comment configurer GitLab Private NPM Registry ? Meilleures pratiques pour la gestion multi-paquets et des permissions

Résolvez les problèmes de configuration de GitLab Private NPM Registry, y compris la logique .npmrc, la gestion multi-paquets et le dépannage des erreurs 404, avec les meilleures pratiques pour l'unification du Registry.

Essayez-vous d’utiliser un paquet privé (Private Package) dans le projet de votre entreprise mais êtes bloqué sur la configuration .npmrc ?

Pourquoi obtenez-vous toujours 404 Not Found même après avoir défini le jeton (Token) ?

Lorsque l’entreprise a plusieurs équipes et plusieurs paquets (par exemple @frontend, @backend), comment gérez-vous .npmrc avec élégance ?

Briser les deux mythes de .npmrc

Pour comprendre .npmrc, vous devez d’abord comprendre comment il fonctionne.

Simplement, sa logique centrale ne concerne que deux choses : Mappage de portée (Scope Mapping) et Authentification.

1. Mappage de portée (Scope Mapping)

Cela dit à npm : Lorsque vous voyez un paquet commençant par @company, n’allez pas sur le npmjs.org officiel, allez sur notre GitLab Registry spécifié.

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

2. Authentification (Authentication)

Avec l’adresse, vous avez aussi besoin d’une clé. La clé est votre AuthToken.

Voici une règle super cruciale : L’URL du Registry et le chemin de l’AuthToken doivent “correspondre exactement”.

# ✅ Correct : Le chemin est exactement le même que le registry défini ci-dessus
//gitlab.com/api/v4/groups/100/-/packages/npm/:_authToken=${GITLAB_TOKEN}

# ❌ Incorrect : Chemin incompatible, cela causera un échec de permission
//gitlab.com/api/v4/:_authToken=${GITLAB_TOKEN}

Beaucoup de gens échouent dans la configuration souvent parce que le chemin a une barre oblique supplémentaire ou manque d’un niveau.

Enfer des dépendances et erreurs 404

La situation la plus douloureuse est : Vous installez le paquet A, qui dépend du paquet B (également privé), et ensuite npm crache un 404 Not Found.

Pourquoi cela arrive-t-il ? C’est parce que lorsque npm résout les dépendances, s’il n’y a pas de relation correcte, il se perd.

Surtout lorsque vous avez deux portées différentes (par exemple @team-a et @team-b) dans différents groupes GitLab, .npmrc devient extrêmement complexe et difficile à maintenir. De plus, différents Registries peuvent avoir besoin de différents jetons, gérer ces variables d’environnement est épuisant.

Y a-t-il un moyen plus intelligent ?

Solution recommandée : Unified Download Group Registry & Independent Publish Project Registry

Registry Description
Group Registry Pour pouvoir unifier le téléchargement de tous les paquets, unifiez la configuration du Group Registry pour télécharger tous les paquets sous ce groupe Gitlab.
Project Registry Pour les permissions lors de la publication, chaque projet peut configurer son propre Project Registry pour publier.

Pourquoi faire ça ?

Raison Description
Installation simple Peut facilement installer et télécharger tous les paquets dans le même groupe.
Publication simple Peut facilement publier des paquets dans leurs projets respectifs, évitant que différents paquets publient dans le même Registry ; chaque projet a son propre Registry.
Gestion facile des jetons Que ce soit sur l’ordinateur du développeur ou dans l’environnement CI/CD, il suffit de maintenir un ensemble de GITLAB_NPM_TOKEN.
Éviter les erreurs de dépendance Tous les paquets privés sont au même endroit, npm les trouvera certainement.

Configuration en action

Vous pouvez copier directement ce modèle :

N’oubliez pas de confier la tâche de protéger le Jeton aux variables d’environnement, ne codez absolument pas le Jeton en dur dans le code !

# .npmrc
# @company scope utilise le registry au niveau du groupe
# Tous les paquets @company/* seront installés depuis ce registry
@company:registry=https://gitlab.com/api/v4/groups/YOUR_GROUP_ID/-/packages/npm/

# Configuration d'authentification GitLab npm registry
# Utiliser le jeton d'authentification commun gitlab.com (couvre toutes les demandes au niveau du groupe et du projet)
//gitlab.com/api/v4/groups/YOUR_GROUP_ID/-/packages/npm/:_authToken=${GITLAB_NPM_TOKEN}
# Utiliser le registry du projet pour publier des paquets
//gitlab.com/api/v4/projects/YOUR_PROJECT_ID/packages/npm/:_authToken=${GITLAB_NPM_TOKEN}


# Les autres paquets publics vont toujours au registry officiel
registry=https://registry.npmjs.org/

Configurez publishConfig dans package.json pour publier le paquet dans le GitLab Project Registry correspondant.

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

Conclusion

Grâce à la stratégie de “Unified Download Group Registry” et “Independent Publish Project Registry”, nous pouvons réduire considérablement les coûts de maintenance et rendre le flux de développement plus fluide.

Objectif Description
Correspondance précise Le mappage de portée et le chemin du Jeton doivent correspondre exactement
Sécurité d’abord Utilisez la variable d’environnement ${GITLAB_NPM_TOKEN} pour gérer les informations privées
Gestion centralisée Priorisez l’utilisation du groupe GitLab unifié pour télécharger tous les paquets privés de l’entreprise
Publication indépendante Priorisez l’utilisation du projet GitLab indépendant pour publier les paquets privés respectifs, en gérant les paquets indépendamment pour éviter le chaos

En maîtrisant ces logiques, GitLab NPM Registry sera un puissant assistant dans le processus de développement de votre entreprise !

All rights reserved,未經允許不得隨意轉載
Généré avec Hugo
Thème Stack conçu par Jimmy