Back

Corriger l'erreur « npm ERR! ERESOLVE unable to resolve dependency tree »

Corriger l'erreur « npm ERR! ERESOLVE unable to resolve dependency tree »

La redoutable erreur npm ERR! ERESOLVE unable to resolve dependency tree bloque quotidiennement d’innombrables développeurs. Cette erreur d’installation npm apparaît lorsque npm ne parvient pas à trouver des versions compatibles de packages fonctionnant ensemble, créant un conflit de dépendances qui bloque l’installation. Voici comment la comprendre et la corriger rapidement.

Points clés à retenir

  • Les erreurs ERESOLVE surviennent lorsque npm ne peut pas satisfaire simultanément toutes les exigences de version des packages
  • npm 7+ applique une vérification des dépendances plus stricte par rapport à npm 6
  • L’alignement des versions est la solution la plus fiable, tandis que les options comme —legacy-peer-deps offrent des solutions de contournement rapides
  • Des mises à jour régulières des dépendances et des vérifications de compatibilité préviennent les conflits futurs

Que signifie l’erreur npm ERESOLVE ?

L’erreur ERESOLVE se produit lorsque l’algorithme de résolution des dépendances de npm ne peut pas satisfaire simultanément toutes les exigences de version. À partir de npm 7, le gestionnaire de packages est devenu plus strict concernant les peer dependencies (dépendances entre pairs) et les conflits de version — ce qui générait des avertissements dans npm 6 provoque désormais des erreurs.

Lorsque vous voyez cette erreur, npm vous dit essentiellement : « Le package A nécessite la version 1.0 d’une dépendance, mais le package B nécessite la version 2.0, et je ne peux pas installer les deux. »

Pourquoi les conflits d’arborescence de dépendances npm se produisent

Incompatibilités de versions

La cause la plus courante implique des exigences de version incompatibles entre les packages. Par exemple, dans un projet Angular :

npm ERR! Found: @angular/core@11.0.3
npm ERR! Could not resolve dependency:
npm ERR! peer @angular/common@"^9.1.0 || ^10.0.0" from @agm/core@3.0.0

Ici, votre projet utilise Angular 11, mais le package @agm/core ne prend en charge qu’Angular 9 ou 10.

Peer Dependencies

Les peer dependencies sont des packages qui ne sont pas directement installés mais dont l’existence est attendue dans votre projet. Lorsque différents packages nécessitent différentes versions de la même peer dependency, des conflits de packages Node.js apparaissent. Cela est particulièrement fréquent avec :

  • Les bibliothèques React et React Native nécessitant des versions spécifiques de React
  • Les packages Angular nécessitant des versions correspondantes du noyau
  • Les plugins Next.js attendant des configurations ESLint particulières

Changements de version npm

Le passage de npm 6 à npm 7+ a introduit une vérification des dépendances plus stricte. Ce qui s’installait auparavant avec des avertissements échoue maintenant complètement, obligeant les développeurs à résoudre les conflits sous-jacents.

Comment corriger l’erreur d’arborescence de dépendances npm

Solution 1 : Mettre à jour ou aligner les versions des packages (Recommandé)

Tout d’abord, identifiez les packages en conflit :

npm ls

Ensuite, mettez à jour les packages problématiques vers des versions compatibles :

npm update package-name
# ou installer une version spécifique
npm install package-name@version

Pour l’exemple Angular ci-dessus, vous devriez soit :

  • Mettre à jour @agm/core vers une version prenant en charge Angular 11
  • Rétrograder Angular vers la version 10

Solution 2 : Installation propre

Parfois, tout effacer aide :

rm -rf node_modules package-lock.json
npm cache clean --force
npm install

Cela force npm à recalculer entièrement l’arborescence des dépendances depuis le début.

Solution 3 : Utiliser l’option —legacy-peer-deps

Lorsque vous avez besoin d’une solution de contournement rapide, l’option --legacy-peer-deps indique à npm d’utiliser l’ancien algorithme de résolution de npm 6 :

npm install --legacy-peer-deps

Pour rendre cela permanent pour votre projet :

npm config set legacy-peer-deps true

Important : Bien que cela résolve le problème immédiat, cela contourne les vérifications de sécurité de npm. Vos packages pourraient ne pas fonctionner correctement ensemble.

Solution 4 : Utiliser l’option —force

L’option --force ignore tous les conflits de dépendances :

npm install --force

Attention : C’est l’option la plus risquée. Utilisez-la uniquement lorsque vous comprenez les conséquences et n’avez pas d’autre choix.

Exemples concrets

Conflit ESLint avec Next.js

npm ERR! peer eslint@"^7.23.0 || ^8.0.0" from eslint-config-next@14.0.4

Solution : Mettez à jour vers la dernière version d’eslint-config-next :

npm install eslint-config-next@latest --save-dev

Incompatibilité de version React Native

npm ERR! peer react@"18.0.0" from react-native@0.70.0

Solution : Assurez-vous que les versions de React et React Native sont compatibles en consultant le tableau de compatibilité React Native.

Bonnes pratiques pour prévenir les erreurs d’installation npm

  1. Maintenez les dépendances à jour régulièrement - Ne laissez pas les packages prendre trop de retard
  2. Vérifiez la compatibilité avant de mettre à niveau - Utilisez npm outdated pour voir les mises à jour disponibles
  3. Utilisez des versions exactes en production - Envisagez d’utiliser des versions exactes (1.2.3 au lieu de ^1.2.3) pour les dépendances critiques
  4. Documentez les exigences de version - Notez toute combinaison de versions spécifique qui fonctionne dans votre README

Quand utiliser chaque solution

  • Alignement des versions : Essayez toujours cela en premier — c’est la solution appropriée
  • Installation propre : Lorsque package-lock.json pourrait être corrompu
  • —legacy-peer-deps : Pour les anciens projets ou lorsque vous comprenez les risques
  • —force : Dernier recours pour les environnements de développement uniquement

Conclusion

L’erreur npm ERESOLVE est frustrante mais résoluble. Bien que les options comme --legacy-peer-deps et --force offrent des solutions rapides, la solution la plus stable reste la mise à jour des packages vers des versions compatibles. Comprendre pourquoi ces conflits de packages Node.js se produisent vous aide à choisir la bonne solution pour votre situation et à prévenir les futurs problèmes d’arborescence de dépendances npm.

FAQ

L'option --force ignore tous les conflits et avertissements pendant l'installation, tandis que --legacy-peer-deps utilise spécifiquement la résolution des peer dependencies moins stricte de npm 6. Legacy peer deps est plus sûr car il n'affecte que la gestion des peer dependencies, alors que force contourne toutes les vérifications de sécurité.

Oui, exécutez npm config set legacy-peer-deps true globalement. Cependant, ce n'est pas recommandé car cela s'applique à tous les projets sur votre machine. À la place, ajoutez un fichier .npmrc avec legacy-peer-deps=true aux projets spécifiques qui en ont besoin.

Cela se produit généralement lorsque vous mettez à niveau npm de la version 6 vers 7 ou supérieure, mettez à jour un package qui introduit de nouvelles peer dependencies, ou lorsqu'une dépendance met à jour ses propres exigences. Vérifiez votre version npm avec npm -v et les changements récents de packages.

Understand every bug

Uncover frustrations, understand bugs and fix slowdowns like never before 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