¿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)


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.


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


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.


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í

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.