Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

482
Vistas
npm: Cuándo usar `--force` y `--legacy-peer-deps`

Soy nuevo en npm y estoy tratando de entender cómo funciona la recreación del directorio node_modules para la implementación.

Usamos npm ci en lugar de npm install para garantizar un borrón y cuenta nueva durante la implementación. Sin embargo, cuando lo ejecutamos sin banderas, obtenemos el siguiente error:

Solucione el conflicto de dependencia ascendente o vuelva a intentar este comando con --force o --legacy-peer-deps para aceptar una resolución de dependencia incorrecta (y potencialmente rota).

La documentación para npm install para --force es la siguiente (no hay indicadores en la página de npm ci ):

El argumento -f o --force obligará a npm a obtener recursos remotos incluso si existe una copia local en el disco.

Mientras tanto, la documentación para --legacy-peer-deps dice:

--legacy-peer-deps: ignora todas las dependencias de los pares al instalar, al estilo de las versiones 4 a 6 de npm.

Parece que ambas banderas permitirán que npm ci genere el directorio node_modules sin ningún problema, pero aún no tengo claras las diferencias entre los dos.

Por lo que entiendo, --force parece que será sobre la base de que la última dependencia descargada gana y sobrescribirá cualquier dependencia descargada previamente. Mientras tanto, --legacy-peer-deps siempre omitirá las dependencias de pares (cualesquiera que sean) durante la instalación, incluso si no hay problemas.

¿Cuáles son las diferencias entre las dos banderas y cuándo debemos usarlas?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

En la nueva versión de npm (v7), de forma predeterminada, npm install fallará cuando encuentre dependencias entre pares en conflicto. Antes no era así.

Eche un vistazo aquí para obtener más información sobre las dependencias entre pares en npm v7.

Las diferencias entre los dos están a continuación:

  • --legacy-peer-deps : ignore todas las dependencias de los pares al instalar, al estilo de las versiones 4 a 6 de npm.

  • --strict-peer-deps : falla y aborta el proceso de instalación para cualquier peerDependencies en conflicto cuando se encuentre. De forma predeterminada, npm solo fallará en caso de conflictos de peerDependencies provocados por las dependencias directas del proyecto raíz.

over 4 years ago · Santiago Trujillo Denunciar

0

En el artículo de https://github.blog/2021-02-02-npm-7-is-now-generally-disponible/

Tiene la opción de volver a intentarlo con --force para omitir el conflicto o --legacy-peer-deps para ignorar por completo las dependencias entre pares (este comportamiento es similar a las versiones 4-6).

Estoy de acuerdo en que esta oración no es muy clara, pero "ignorar por completo las dependencias entre pares" no suena bien. Usemos un ejemplo real:

Aquí hay un error de dependencia de pares que encontré cuando npm install :

 npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: mobile@undefined npm ERR! Found: react@17.0.1 npm ERR! node_modules/react npm ERR! react@"17.0.1" from the root project npm ERR! peer react@">=16.0.0" from @testing-library/react-native@7.2.0 npm ERR! node_modules/@testing-library/react-native npm ERR! dev @testing-library/react-native@"7.2.0" from the root project npm ERR! npm ERR! Could not resolve dependency: npm ERR! peer react@"16.13.1" from react-native@0.63.2 npm ERR! node_modules/react-native npm ERR! react-native@"https://github.com/expo/react-native/archive/sdk-39.0.4.tar.gz" from the root project npm ERR! peer react-native@">=0.59" from @testing-library/react-native@7.2.0 npm ERR! node_modules/@testing-library/react-native npm ERR! dev @testing-library/react-native@"7.2.0" from the root project npm ERR! npm ERR! Fix the upstream dependency conflict, or retry npm ERR! this command with --force, or --legacy-peer-deps npm ERR! to accept an incorrect (and potentially broken) dependency resolution. npm ERR! npm ERR! See /Users/me/.npm/eresolve-report.txt for a full report. npm ERR! A complete log of this run can be found in: npm ERR! /Users/me/.npm/_logs/2021-03-13T00_10_33_813Z-debug.log npm ERR! code 1 npm ERR! path /Users/me/my-app npm ERR! command failed npm ERR! command sh -c sh ./bin/setup.sh npm ERR! A complete log of this run can be found in: npm ERR! /Users/me/.npm/_logs/2021-03-13T00_10_33_860Z-debug.log

A continuación se muestra la diferencia de package-lock.json entre --legacy-peer-deps y --force .

  1. Si ejecuto npm install --legacy-peer-deps , agrega esto en mi paquete-lock.json :
 "node_modules/@unimodules/react-native-adapter": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-5.7.0.tgz", "integrity": "sha512-L557/+sc8ZKJVgo1734HF1QNCxrt/fpqdmdNgySJT+kErux/AJNfPq3flsK0fyJduVmniTutYIMyW48cFoPKDA==", "dependencies": { "invariant": "^2.2.4", "lodash": "^4.5.0" }, "peerDependencies": { "react-native": "*", "react-native-web": "~0.13.7" } }, ... "@unimodules/react-native-adapter": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-5.7.0.tgz", "integrity": "sha512-L557/+sc8ZKJVgo1734HF1QNCxrt/fpqdmdNgySJT+kErux/AJNfPq3flsK0fyJduVmniTutYIMyW48cFoPKDA==", "requires": { "invariant": "^2.2.4", "lodash": "^4.5.0" } },
  1. Si uso npm install --force , en su lugar, agrega
 "node_modules/expo/node_modules/@unimodules/react-native-adapter": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-5.7.0.tgz", "integrity": "sha512-L557/+sc8ZKJVgo1734HF1QNCxrt/fpqdmdNgySJT+kErux/AJNfPq3flsK0fyJduVmniTutYIMyW48cFoPKDA==", "dependencies": { "invariant": "^2.2.4", "lodash": "^4.5.0" }, "peerDependencies": { "react-native": "*", "react-native-web": "~0.13.7" } }, "node_modules/expo/node_modules/inline-style-prefixer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-5.1.2.tgz", "integrity": "sha512-PYUF+94gDfhy+LsQxM0g3d6Hge4l1pAqOSOiZuHWzMvQEGsbRQ/ck2WioLqrY2ZkHyPgVUXxn+hrkF7D6QUGbA==", "peer": true, "dependencies": { "css-in-js-utils": "^2.0.0" } }, "node_modules/expo/node_modules/react-native-web": { "version": "0.13.18", "resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.13.18.tgz", "integrity": "sha512-WR/0ECAmwLQ2+2cL2Ur+0/swXFAtcSM0URoADJmG6D4MnY+wGc91JO8LoOTlgY0USBOY+qG/beRrjFa+RAuOiA==", "peer": true, "dependencies": { "array-find-index": "^1.0.2", "create-react-class": "^15.6.2", "deep-assign": "^3.0.0", "fbjs": "^1.0.0", "hyphenate-style-name": "^1.0.3", "inline-style-prefixer": "^5.1.0", "normalize-css-color": "^1.0.2", "prop-types": "^15.6.0", "react-timer-mixin": "^0.13.4" }, "peerDependencies": { "react": ">=16.5.1", "react-dom": ">=16.5.1" } }, ... "dependencies": { "@unimodules/react-native-adapter": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-5.7.0.tgz", "integrity": "sha512-L557/+sc8ZKJVgo1734HF1QNCxrt/fpqdmdNgySJT+kErux/AJNfPq3flsK0fyJduVmniTutYIMyW48cFoPKDA==", "requires": { "invariant": "^2.2.4", "lodash": "^4.5.0" } }, "inline-style-prefixer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-5.1.2.tgz", "integrity": "sha512-PYUF+94gDfhy+LsQxM0g3d6Hge4l1pAqOSOiZuHWzMvQEGsbRQ/ck2WioLqrY2ZkHyPgVUXxn+hrkF7D6QUGbA==", "peer": true, "requires": { "css-in-js-utils": "^2.0.0" } }, "react-native-web": { "version": "0.13.18", "resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.13.18.tgz", "integrity": "sha512-WR/0ECAmwLQ2+2cL2Ur+0/swXFAtcSM0URoADJmG6D4MnY+wGc91JO8LoOTlgY0USBOY+qG/beRrjFa+RAuOiA==", "peer": true, "requires": { "array-find-index": "^1.0.2", "create-react-class": "^15.6.2", "deep-assign": "^3.0.0", "fbjs": "^1.0.0", "hyphenate-style-name": "^1.0.3", "inline-style-prefixer": "^5.1.0", "normalize-css-color": "^1.0.2", "prop-types": "^15.6.0", "react-timer-mixin": "^0.13.4" } } } },

Como puede ver, npm install --force aún fija muchas versiones de dependencia, lo que es más estricto.

Entonces, para npm 7, si npm install falla debido a un problema de dependencia entre pares, lo primero que puede intentar es npm install --force .

over 4 years ago · Santiago Trujillo Denunciar

0

Cuando el proyecto tiene un conflicto de versión de NPM y aparece un error.

Error

 An unhandled exception occurred: The 'buildOptimizer' option cannot be used without 'aot'.

En archivo .npmrc

 legacy-peer-deps true

Símbolo del sistema

 npm install
over 4 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 Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda