• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

279
Vistas
¿Qué hace exactamente npm install --legacy-peer-deps? ¿Cuándo se recomienda? ¿Cuál es un posible caso de uso?

Acabo de encontrarme con este error:

 npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: nexttwin@0.1.0 npm ERR! Found: react@17.0.1 npm ERR! node_modules/react npm ERR! react@"17.0.1" from the root project npm ERR! npm ERR! Could not resolve dependency: npm ERR! peer react@"^16.8.0" from react-hook-mousetrap@2.0.4 npm ERR! node_modules/react-hook-mousetrap npm ERR! react-hook-mousetrap@"*" from the root project npm ERR!

El módulo que estoy tratando de instalar parece tener una dependencia de pares diferente a la que he instalado. Parece que npm cambió su comportamiento en este sentido y ahora deja que la instalación falle.

¿Qué puedo hacer ahora para arreglar esto? No quiero degradar mi versión de React por esto.

Sé que hay un indicador llamado --legacy-peer-deps pero no estoy seguro de qué hace exactamente y si se recomienda usarlo/cuáles son las posibles desventajas. Supongo que hay una razón por la que npm dejó que fallara la instalación.

Es extraño porque estaba usando yarn hasta hace muy poco y todo estaba bien.

about 3 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

--legacy-peer-deps restaura el comportamiento de instalación de peerDependency de NPM v4 a v6

Una forma de pensar en esta bandera es que no está haciendo algo nuevo; más bien le está diciendo a NPM que no haga algo nuevo, ya que NPM v7 ahora instala peerDependencies de forma predeterminada .

En muchos casos, esto genera conflictos de versión, lo que interrumpirá el proceso de instalación.

El --legacy-peer-deps se introdujo con v7 como una forma de evitar la instalación automática de peerDependency; le dice a NPM que ignore los departamentos de pares y continúe con la instalación de todos modos. Así es como solían ser las cosas con NPM v4 a v6.

Si no tiene clara la diferencia entre los departamentos regulares y los departamentos de pares, aquí tiene un poco de contexto:

Dependencias vs peerDependencies

Dependencias: Bibliotecas o módulos que necesita un módulo NPM para poder trabajar en producción . (Ejemplo: recientemente construí una biblioteca de simulación de gráficos circulares que usa Chance.js para calcular números aleatorios dentro de un rango específico; por lo tanto, Chance es una dependencia de mi módulo).

peerDependencies : una dependencia de pares es una versión específica o un conjunto de versiones de una biblioteca de software de terceros con la que un módulo está diseñado para funcionar . Son similares en concepto a la relación entre una extensión de navegador y un navegador. (Ejemplo: react-redux tiene dos peerDependencies bastante lógicas: react y redux ).

Este problema está siendo impulsado, en parte, por React v17

Debido a la gran cantidad de módulos que no han agregado específicamente React v17 como una dependencia de pares, ahora es común encontrar el error de unable to resolve dependency tree cuando se ejecutan instalaciones de npm dentro de una aplicación React v17.

Este error se activará cada vez que un módulo (o cualquiera de sus propias dependencias) enumere una versión anterior de React como una dependencia del mismo nivel sin incluir también React v17 específicamente .

( Nota: se producirá un comportamiento similar con la actualización de la versión principal de cualquier otro marco o biblioteca).

Cómo verificar peerDependencies para cualquier módulo dado

NPM en sí no enumera los departamentos de pares en las páginas de un módulo determinado. Sin embargo, existe una solución sencilla para verificar las dependencias entre pares, ya sea antes o después de la instalación. Simplemente ejecute:

npm info name-of-module peerDependencies

Este comando devolverá el nombre de cada peerDependency junto con todas las versiones compatibles.

tl; dr:

  • NPM v7 ahora instala peerDependencies de forma predeterminada; este no fue el caso con v4-v6
  • Una peerDependency es un módulo npm de terceros con el que un módulo determinado está diseñado para funcionar
  • Los módulos NPM deben nombrar versiones específicas de sus peerDependencies
  • Si está ejecutando, por ejemplo, una aplicación React v17 y un módulo no ha enumerado React 17 como una dependencia de pares, pero ha enumerado versiones anteriores, la instalación explotará.
  • Agregar --legacy-peer-deps a su instalación de npm evitará la instalación automática de peerDependency, pero esto puede generar conflictos debido a cambios potencialmente importantes
about 3 years ago · Santiago Trujillo Denunciar

0

Así es como resolví este problema:

Primero, lo que sucede: react-hook-mousetrap busca react@16.8.0, pero no lo encuentra. En su lugar, está encontrando @react17.0.1, que es una versión más nueva. Por alguna razón, a mousetrap no le gusta esta nueva versión, y se le está notificando (no es gran cosa, pero decidieron que valía la pena detener su compilación).

Una solución: instale a la fuerza la versión específica de reaccionar que quiere mousetrap:

 yarn add react@16.8.0

Lo que esto hace es revertir su versión de reacción a una un poco más antigua que sea compatible con la trampa para ratones. No notará ninguna diferencia, y en futuras iteraciones, esperemos que se actualice la trampa para ratones, para que esto desaparezca.

Otra solución: tome la decisión radical de no instalar ninguna dependencia de versión anterior:

 npm add xxxx --legacy-peer-deps

Lo que esto hace es ignorar las antiguas dependencias de este paquete. Es más completo y toma muchas decisiones por usted.

about 3 years ago · Santiago Trujillo Denunciar

0

Si no desea bloquear la instalación de dependencias anteriores, puede hacer que npm ignore esas advertencias forzando el script que está ejecutando. --force

about 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda