En una configuración de equipo, por lo general, me he enfrentado a conflictos de fusión en package-lock.json
y mi solución rápida siempre ha sido eliminar el archivo y regenerarlo con npm install
. No he pensado seriamente en las implicaciones de esta solución porque no ha causado ningún problema perceptible antes.
¿Hay algún problema con eliminar el archivo y hacer que npm
lo vuelva a crear de esa manera en lugar de resolver los conflictos manualmente?
Sí, puede y afectará a todo el proyecto de muy mala manera.
si su equipo no ejecuta npm install
después de cada extracción de git pull
, todos están usando diferentes versiones de dependencias. Entonces termina con "¡¡pero a mí me funciona!!" y "No entiendo por qué mi código no te funciona"
incluso si todo el equipo ejecuta npm install
, no significa que todo esté bien. en algún momento puede encontrar que su proyecto actúa de manera diferente. en una parte que hace años que no cambias. y después de la depuración (probablemente, bastante dolorosa), encontrará que se debe a que la dependencia de tercer nivel se actualizó para la próxima versión principal y esto provocó algunos cambios importantes.
Conclusión: nunca elimine package-lock.json
.
Sí, para las dependencias de primer nivel, si las especificamos sin rangos (como "react": "16.12.0"
), obtenemos las mismas versiones cada vez que ejecutamos npm install
. Pero no podemos decir lo mismo sobre las dependencias de más de 2 niveles de profundidad (dependencias de las que dependen nuestras dependencias), por lo que package-lock.json
es realmente importante para la estabilidad.
En tu caso, es mejor que hagas lo siguiente:
package.json
npm install
Tan fácil como parece. Lo mismo para yarn: corrige el conflicto del archivo de bloqueo por sí solo. El único requisito aquí es resolver todos los conflictos en package.json
de antemano, si los hay.
Según los documentos , npm solucionará los conflictos de combinación en package-lock.json
por usted.
[Actualización de 2021] ¡importante! Si ya usa alguna biblioteca y la cuenta npm/GitHub de su mantenedor está pirateada. Y se lanza una nueva versión con código malicioso en su interior. Y tienes package-lock.json
intacto. Estarás bien. Si lo sueltas, estás en problemas.
Sí, puede tener efectos secundarios negativos, tal vez no muy a menudo, pero por ejemplo, puede tener en package.json "moduleX": "^1.0.0"
y solía tener "moduleX": "1.0.0"
en package-lock.json
Al eliminar package-lock.json
y ejecutar npm install
, podría estar actualizando a la versión 1.0.999 de moduleX sin saberlo y tal vez hayan creado un error o hayan realizado un cambio radical hacia atrás (sin seguir el control de versiones semántico).
De todos modos, ya existe una solución estándar para ello.
package.json
npm install --package-lock-only
Echa un vistazo a este enlace para obtener más información:
https://docs.npmjs.com/cli/v6/configuring-npm/package-locks#resolving-lockfile-conflicts
Sé que es una vieja pregunta, pero para futuros buscadores, también puede usar npm-merge-driver que intenta resolver automáticamente los problemas de combinación de archivos relacionados con npm.
Simplemente instálelo globalmente npx npm-merge-driver install --global
. Puede leer más sobre esto aquí npm-merge-driver
Editar: solo quiero advertir a las personas interesadas en usar el paquete anterior, que en algún momento puede comportarse de manera errática y difícil de eliminar. Entonces, aunque es una herramienta útil, todavía necesita algo de trabajo.
Editar: este repositorio ahora está archivado y es de solo lectura.