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.
Discover how at OpenReplay.com.
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
- Maintenez les dépendances à jour régulièrement - Ne laissez pas les packages prendre trop de retard
- Vérifiez la compatibilité avant de mettre à niveau - Utilisez
npm outdated
pour voir les mises à jour disponibles - 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 - 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.