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 trueSímbolo del sistema instala versiones de dependencia que es más estricta
npm install --force