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 buscar 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?
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.
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 el archivo .npmrc : esto ignora todas las dependencias de pares
legacy-peer-deps true
Símbolo del sistema instala versiones de dependencia que es más estricta
npm install --force