Después de actualizar mi NPM a la última versión (de 3.X a 5.2.0) y ejecutar npm installun proyecto existente, obtengo un package-lock.jsonarchivo creado automáticamente .
Puedo decir package-lock.jsonque me da un árbol de dependencia exacto en lugar de package.json.
Solo con esa información, parece que package.jsones redundante y ya no se necesita.
¿Ambos son necesarios para que NPM funcione?
¿Es seguro o posible usar solo el package-lock.jsonarchivo?
Los documentos en package-lock.json ( doc1 , doc2 ) no mencionan nada al respecto.
Editar :
Después de pensarlo un poco más, llegué a la conclusión de que si alguien quiere usar su proyecto con una versión anterior de NPM (anterior a 5.x), aún instalaría todas las dependencias, pero con versiones menos precisas (versiones de parche)
fuente

Respuestas:
¿Necesitas ambos
package-lock.jsonypackage.json? No se .¿Necesitas el
package.json? Sí .¿Puedes tener un proyecto solo con el
package-lock.json? No se .Se
package.jsonusa para más que dependencias, como definir propiedades del proyecto, descripción, información de autor y licencia, scripts, etc. Sepackage-lock.jsonusa únicamente para bloquear dependencias a un número de versión específico.fuente
package-lock.json: registra la versión exacta de cada paquete instalado que le permite volver a instalarlos. Las instalaciones futuras podrán construir un árbol de dependencias idéntico.package.json: registra la versión mínima que necesita la aplicación. Si actualiza las versiones de un paquete en particular, el cambio no se reflejará aquí.fuente
package.jsonregistra la versión mínima que necesita la aplicación y package-lock.json registra la versión exacta de cada paquete instalado, entonces tengo una situación extraña en la que un módulo está configurado en la versión 0.112.1 en el paquete .json y 0.110.0 en package-lock.json ...Si su pregunta es si el archivo de bloqueo debe comprometerse con su control de origen, debe hacerlo. Será ignorado bajo ciertas circunstancias.
Lo encontré hinchando solicitudes de extracción e historial de confirmación, por lo que si ve que cambia, realice una confirmación por separado.
fuente
package-lock.jsonparece una versión más detallada depackage.json, por lo que es seguro o posible usar solo el archivo de bloqueo.package-lock.jsonbajo control de versión.Una explicación más precisa y detallada de la razón detrás de mantener package-lock.json se puede encontrar aquí
fuente