Back

Gérer les gestionnaires de paquets avec Node Corepack

Gérer les gestionnaires de paquets avec Node Corepack

Si vous avez déjà cloné un projet et rencontré immédiatement des erreurs parce que votre version locale de Yarn ou pnpm ne correspondait pas à celle attendue par le projet, vous comprenez déjà le problème que Node Corepack résout. La gestion des versions des gestionnaires de paquets est facile à négliger, jusqu’à ce qu’elle casse quelque chose dans la CI, dans un build Docker ou sur la machine d’un collègue.

Corepack résout ce problème en vous permettant d’épingler la version du gestionnaire de paquets directement dans votre projet, puis en l’imposant automatiquement. Voici comment cela fonctionne, ce qui a changé récemment et les points à surveiller.

Points clés à retenir

  • Corepack est un proxy binaire qui lit le champ packageManager dans package.json et garantit que la bonne version de Yarn ou pnpm est utilisée dans chaque environnement.
  • À partir de Node.js 25, Corepack n’est plus livré par défaut et doit être installé explicitement via npm install -g corepack.
  • Mettez à jour vos configurations CI, vos Dockerfiles et votre documentation d’intégration pour inclure une étape explicite d’installation de Corepack avant d’exécuter corepack enable.
  • Pour les builds hors ligne ou en environnement isolé, pré-téléchargez les binaires avec corepack prepare <pm>@<version> --activate pendant que l’accès réseau est disponible.
  • pnpm prend également en charge la gestion de sa propre version de gestionnaire de paquets sans dépendre entièrement de Corepack.

Ce que fait réellement Node Corepack

Corepack est une couche de proxy binaire qui s’intercale entre les commandes de votre shell et les binaires de votre gestionnaire de paquets. Lorsque vous exécutez yarn install ou pnpm add, Corepack intercepte l’appel, vérifie le champ packageManager dans votre package.json et garantit l’utilisation de la bonne version — en la téléchargeant à la demande si elle n’est pas déjà mise en cache localement.

Cela signifie que la gestion des versions du gestionnaire de paquets devient partie intégrante de la configuration de votre projet, et non plus une étape de configuration propre à chaque développeur.

Le champ packageManager ressemble à ceci :

{
  "packageManager": "yarn@4.2.2"
}

Vous pouvez également y ajouter un hash pour vérifier le binaire téléchargé, ce qui aide à se prémunir contre les registres altérés ou les miroirs compromis.

Corepack n’est plus inclus avec Node.js 25+

De nombreux guides en ligne supposent que Corepack est livré avec Node.js. C’était vrai pour Node.js 16.9 jusqu’à la version 24, où il était inclus comme outil expérimental, activable à la demande. Depuis Node.js 25, Corepack n’est plus distribué avec Node.js.

Les implications pratiques sont importantes :

  • Développement local : les développeurs utilisant Node.js 25+ doivent installer Corepack explicitement via npm install -g corepack.
  • Pipelines CI : GitHub Actions, GitLab CI et les environnements similaires utilisant des images Node.js récentes n’auront plus Corepack disponible par défaut. Vos fichiers de workflow doivent inclure une étape d’installation explicite.
  • Conteneurs Docker : les images de base construites sur Node.js 25+ n’incluront pas Corepack. Ajoutez RUN npm install -g corepack à votre Dockerfile.
  • Documentation d’intégration : tout README ou guide de contribution indiquant « exécuter corepack enable » sans étape d’installation préalable échouera pour les nouveaux contributeurs sur les versions récentes de Node.

Une fois installé, le workflow reste le même : exécutez corepack enable pour activer les shims, puis laissez le champ packageManager s’occuper du reste.

Utiliser Corepack avec Yarn et pnpm

Yarn et pnpm recommandent tous deux Corepack pour les workflows avec versions épinglées.

Pour les configurations Yarn avec Corepack, définissez le champ et activez :

corepack use yarn@4.2.2
corepack enable

Pour pnpm avec Corepack, le même schéma s’applique :

corepack use pnpm@10.0.0
corepack enable

Corepack imposera la version épinglée partout où Corepack est installé et activé — machines locales, CI et conteneurs.

Les versions récentes de pnpm prennent également en charge la gestion de la version du gestionnaire de paquets directement via pnpm lui-même, ce qui peut réduire la dépendance à Corepack dans les environnements utilisant uniquement pnpm.

Environnements hors ligne et isolés

Corepack télécharge les binaires des gestionnaires de paquets à la demande, ce qui échoue dans les environnements sans accès réseau. La solution consiste à pré-télécharger le binaire avant de passer hors ligne :

corepack prepare yarn@4.2.2 --activate

Exécutez cette commande pendant la construction de votre image Docker ou lors de la phase de configuration de la CI, tant que l’accès réseau est encore disponible.

Conclusion

Node Corepack reste l’un des moyens les plus simples d’imposer la gestion des versions des gestionnaires de paquets au sein d’une équipe. Le champ packageManager dans package.json vous offre la même garantie de reproductibilité pour votre outillage qu’un lockfile vous offre pour vos dépendances.

L’élément clé à mettre à jour dans vos projets et votre documentation : ne supposez pas que Corepack est pré-installé. Sur Node.js 25+, il doit être installé explicitement. Ajoutez cette étape à vos configurations CI, vos Dockerfiles et vos guides de contributeurs dès maintenant, avant que quelqu’un ne tombe sur une erreur déroutante et y perde une heure de débogage.

FAQ

Probablement pas. npm est déjà livré avec Node.js, donc de nombreux projets utilisant uniquement npm s'appuient simplement sur la version de npm fournie avec la version de Node.js choisie. Corepack est le plus souvent utilisé pour les workflows Yarn et pnpm, où les équipes souhaitent un épinglage plus strict des versions du gestionnaire de paquets entre les environnements.

Lorsque Corepack est activé, il intercepte la commande et télécharge ou bascule vers la version déclarée dans packageManager, en ignorant tout Yarn ou pnpm installé globalement. Si Corepack n'est pas activé, c'est votre binaire installé globalement qui s'exécute, ce qui correspond exactement au problème de dérive de version que Corepack est conçu pour éviter.

Vous pouvez ajouter un hash au champ packageManager, par exemple yarn@4.2.2+sha224.<hash>. Corepack vérifiera le binaire téléchargé par rapport à ce hash avant de l'exécuter. Cela protège contre les registres altérés ou les miroirs compromis et est fortement recommandé pour les projets ayant des exigences strictes en matière de sécurité de la chaîne d'approvisionnement.

Pas directement. Le champ packageManager est défini dans le package.json racine et s'applique généralement à l'ensemble du dépôt. Corepack s'attend à un seul gestionnaire de paquets par projet. Si différents workspaces ont réellement besoin d'outils différents, il vous faudra généralement des dépôts séparés ou une orchestration personnalisée en dehors de Corepack lui-même.

Gain control over your UX

See how users are using your site as if you were sitting next to them, learn and iterate faster with OpenReplay. — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay