Solucionar el conflicto de dependencia ascendente al instalar paquetes NPM
Estoy intentando instalar npm vue-mapbox mapbox-gl y aparece un error de árbol de dependencia.
Estoy ejecutando Nuxt.js SSR con Vuetify y no instalé nada relacionado con Mapbox antes de ejecutar esta instalación y recibo este error.
38 error code ERESOLVE
39 error ERESOLVE unable to resolve dependency tree
40 error
41 error While resolving: "example"@"1.0.0"
41 error Found: mapbox-gl@"1.13.0"
41 error node_modules/mapbox-gl
41 error mapbox-gl@"^1.13.0" from the root project
41 error
41 error Could not resolve dependency:
41 error peer mapbox-gl@"^0.53.0" from vue-mapbox@"0.4.1"
41 error node_modules/vue-mapbox
41 error vue-mapbox@"*" from the root project
41 error
41 error Fix the upstream dependency conflict, or retry
41 error this command with --force, or --legacy-peer-deps
41 error to accept an incorrect (and potentially broken) dependency resolution.
41 error
41 error See /Users/user/.npm/eresolve-report.txt for a full report.
42 verbose exit 1
¿Cuál es la forma correcta de solucionar este conflicto de dependencia ascendente?
Parece que es un problema con las dependencias entre pares en la última versión de npm (v7), que todavía es una versión beta.
Prueba con npm install --legacy-peer-deps
. Para obtener información detallada, consulte la publicación del blog Serie npm v7 - ¡Lanzamiento Beta! Y: SemVer: cambios importantes en npm v7 .
Explicación del problema:
Su dependencia mexample
requiere mmapbox-gl
v1.13.0 y mvue-mapbox
requiere mmapbox-gl
v0.53.0.
NPM no sabe qué versión instalar, por lo que muestra una advertencia. Puede evitar los errores utilizando -- force
o --legacy-peer-deps
, pero ignorará un error y obtendrá resultados inesperados.
Corrija el error (mejores prácticas de producción):
Probablemente uno de sus paquetes esté desactualizado. Actualizar paquetes y corregir errores de actualización puede solucionar el conflicto de dependencia.
Anular una dependencia manualmente para evitar advertencias y errores. Está configurando la versión en una específica que sabe que funciona. Generalmente la versión más nueva.
Solución de ejemplo con anulación. Su archivo package.json se verá así:
{
"name": "my-app",
"version": "0.1.0",
"private": true,
"dependencies": {
"mexample": "^1.2.0",
"vue-mapbox": "*"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"overrides": {
"mmapbox-gl": "1.13.0"
}
}
Omita el error (solución rápida y sucia):
--legacy-peer-deps
ignora por completo todas las peerDependencies usando la versión más reciente sin fijar el archivo package-lock.json--force
fuerza el uso de la más nueva, fijando todas las versiones en package-lock.json
Extra: no deberías usar "*" como versión, ya que podría actualizar dependencias importantes y romperlas.
Usar --legacy-peer-deps
después npm install
. Por ejemplo, si desea instalar Radium , utilice:
npm install --legacy-peer-deps --save radium
Hay dos maneras:
Úselo
npm install --legacy-peer-deps
para instalar, y si esto no funciona, useEl método de la fuerza. Agregue --force junto a npm install :
npm install --force
Puedes seguir estos comandos.
Primer tipo:
npm config set legacy-peer-deps true
Luego escribe:
npx create-react-app my-app