Back

Solucionar 'npm ERR! ERESOLVE unable to resolve dependency tree'

Solucionar 'npm ERR! ERESOLVE unable to resolve dependency tree'

El temido error npm ERR! ERESOLVE unable to resolve dependency tree detiene a innumerables desarrolladores cada día. Este error de npm install aparece cuando npm no puede encontrar versiones compatibles de paquetes que funcionen juntas, creando un conflicto de dependencias que bloquea la instalación. Aquí te explicamos cómo entenderlo y solucionarlo rápidamente.

Puntos Clave

  • Los errores ERESOLVE ocurren cuando npm no puede satisfacer todos los requisitos de versión de paquetes simultáneamente
  • npm 7+ aplica verificaciones de dependencias más estrictas en comparación con npm 6
  • La alineación de versiones es la solución más confiable, mientras que flags como —legacy-peer-deps ofrecen soluciones rápidas
  • Las actualizaciones regulares de dependencias y verificaciones de compatibilidad previenen conflictos futuros

¿Qué Significa el Error npm ERESOLVE?

El error ERESOLVE ocurre cuando el algoritmo de resolución de dependencias de npm no puede satisfacer todos los requisitos de versión simultáneamente. A partir de npm 7, el gestor de paquetes se volvió más estricto con las peer dependencies (dependencias entre pares) y los conflictos de versiones—lo que solían ser advertencias en npm 6 ahora genera errores.

Cuando ves este error, npm básicamente está diciendo: “El Paquete A necesita la versión 1.0 de una dependencia, pero el Paquete B necesita la versión 2.0, y no puedo instalar ambas.”

Por Qué Ocurren los Conflictos en el Árbol de Dependencias de npm

Desajustes de Versiones

La causa más común involucra requisitos de versión incompatibles entre paquetes. Por ejemplo, en un proyecto 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

Aquí, tu proyecto tiene Angular 11, pero el paquete @agm/core solo soporta Angular 9 o 10.

Peer Dependencies

Las peer dependencies son paquetes que no se instalan directamente pero se espera que existan en tu proyecto. Cuando diferentes paquetes requieren diferentes versiones de la misma peer dependency, surgen conflictos de paquetes en Node.js. Esto es especialmente común con:

  • Bibliotecas de React y React Native que requieren versiones específicas de React
  • Paquetes de Angular que necesitan versiones coincidentes del core
  • Plugins de Next.js que esperan configuraciones particulares de ESLint

Cambios en las Versiones de npm

El cambio de npm 6 a npm 7+ introdujo verificaciones de dependencias más estrictas. Lo que antes se instalaba con advertencias ahora falla completamente, obligando a los desarrolladores a abordar los conflictos subyacentes.

Cómo Solucionar el Error del Árbol de Dependencias de npm

Solución 1: Actualizar o Alinear Versiones de Paquetes (Recomendado)

Primero, identifica los paquetes en conflicto:

npm ls

Luego actualiza los paquetes problemáticos a versiones compatibles:

npm update package-name
# o instala una versión específica
npm install package-name@version

Para el ejemplo de Angular anterior, podrías:

  • Actualizar @agm/core a una versión que soporte Angular 11
  • Degradar Angular a la versión 10

Solución 2: Instalación Limpia

A veces, limpiar todo ayuda:

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

Esto obliga a npm a recalcular todo el árbol de dependencias desde cero.

Solución 3: Usar el Flag —legacy-peer-deps

Cuando necesitas una solución rápida, el flag --legacy-peer-deps le indica a npm que use el antiguo algoritmo de resolución de npm 6:

npm install --legacy-peer-deps

Para hacer esto permanente en tu proyecto:

npm config set legacy-peer-deps true

Importante: Aunque esto resuelve el problema inmediato, omite las verificaciones de seguridad de npm. Tus paquetes podrían no funcionar correctamente juntos.

Solución 4: Usar el Flag —force

El flag --force ignora todos los conflictos de dependencias:

npm install --force

Advertencia: Esta es la opción más arriesgada. Úsala solo cuando entiendas las consecuencias y no tengas otra opción.

Ejemplos del Mundo Real

Conflicto de ESLint en Next.js

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

Solución: Actualiza a la última versión de eslint-config-next:

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

Desajuste de Versión en React Native

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

Solución: Asegúrate de que las versiones de React y React Native sean compatibles consultando la tabla de compatibilidad de React Native.

Mejores Prácticas para Prevenir Errores de npm Install

  1. Mantén las dependencias actualizadas regularmente - No dejes que los paquetes se queden muy atrás
  2. Verifica la compatibilidad antes de actualizar - Usa npm outdated para ver las actualizaciones disponibles
  3. Usa versiones exactas en producción - Considera usar versiones exactas (1.2.3 en lugar de ^1.2.3) para dependencias críticas
  4. Documenta los requisitos de versión - Anota cualquier combinación específica de versiones que funcione en tu README

Cuándo Usar Cada Solución

  • Alineación de versiones: Siempre intenta esto primero—es la solución adecuada
  • Instalación limpia: Cuando package-lock.json podría estar corrupto
  • —legacy-peer-deps: Para proyectos antiguos o cuando entiendes los riesgos
  • —force: Último recurso solo para entornos de desarrollo

Conclusión

El error npm ERESOLVE es frustrante pero solucionable. Aunque flags como --legacy-peer-deps y --force ofrecen soluciones rápidas, la solución más estable sigue siendo actualizar los paquetes a versiones compatibles. Entender por qué ocurren estos conflictos de paquetes en Node.js te ayuda a elegir la solución correcta para tu situación y prevenir futuros problemas con el árbol de dependencias de npm.

Preguntas Frecuentes

El flag --force ignora todos los conflictos y advertencias durante la instalación, mientras que --legacy-peer-deps específicamente usa la resolución de peer dependencies menos estricta de npm 6. Legacy peer deps es más seguro ya que solo afecta el manejo de peer dependencies, mientras que force omite todas las verificaciones de seguridad.

Sí, ejecuta npm config set legacy-peer-deps true globalmente. Sin embargo, esto no es recomendable ya que se aplica a todos los proyectos en tu máquina. En su lugar, agrega un archivo .npmrc con legacy-peer-deps=true a proyectos específicos que lo necesiten.

Esto típicamente ocurre cuando actualizas npm de la versión 6 a 7 o superior, actualizas un paquete que introduce nuevas peer dependencies, o cuando una dependencia actualiza sus propios requisitos. Verifica tu versión de npm con npm -v y los cambios recientes en los paquetes.

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