¿Necesito tanto package-lock.json como package.json?

149

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)

Omri Luzon
fuente
3
enlace
Lakshmipriya Mukundan

Respuestas:

103

¿Necesitas ambos package-lock.jsony package.json? No se .

¿Necesitas el package.json? .

¿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. Se package-lock.jsonusa únicamente para bloquear dependencias a un número de versión específico.

Markus Stefanko
fuente
19

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í.

Narendar Reddy M
fuente
1
Si lo anterior es cierto y 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 ...
Jean-François Beauchamp
6

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.

Stanley Kirdey
fuente
1
No, no estaba preguntando acerca de los compromisos con el control de fuente. Solo si NPM los necesita a ambos al mismo tiempo para trabajar. package-lock.jsonparece una versión más detallada de package.json, por lo que es seguro o posible usar solo el archivo de bloqueo.
Omri Luzon
Ya veo, he dejado package.json en mis proyectos, principalmente para tener un lugar para los scripts npm.
Stanley Kirdey
1
Ahora hay una pregunta separada sobre si poner package-lock.jsonbajo control de versión.
Adrian W
0

Una explicación más precisa y detallada de la razón detrás de mantener package-lock.json se puede encontrar aquí

Vivek Goel
fuente