last instalar como commands npm

npm - instalar - ¿Cuál es el papel del paquete-lock.json?



npm version (4)

npm @ 5 ha sido publicado, tiene una nueva característica paquete-lock.json archivo (después de la npm install ) que me confunde. Quiero saber, ¿cuál es el efecto de este archivo?


Almacena un árbol de dependencias exacto y versionado en lugar de usar versiones destacadas como package.json (por ejemplo, 1.0. *). Esto significa que puede garantizar las dependencias para otros desarrolladores o lanzamientos de productos, etc. También tiene un mecanismo para bloquear el árbol, pero generalmente se regenerará si cambia package.json.

De los documentos npm :

package-lock.json se genera automáticamente para cualquier operación en la que npm modifique el árbol node_modules o package.json. Describe el árbol exacto que se generó, de modo que las instalaciones posteriores pueden generar árboles idénticos, independientemente de las actualizaciones de dependencia intermedias.

Este archivo está destinado a ser confirmado en repositorios de origen y sirve para varios propósitos:

Describa una representación única de un árbol de dependencias de modo que se garantice que los compañeros de equipo, las implementaciones y la integración continua instalen exactamente las mismas dependencias.

Proporcione una facilidad para que los usuarios "viajen en el tiempo" a estados anteriores de node_modules sin tener que confirmar el directorio en sí.

Para facilitar una mayor visibilidad de los cambios de árbol a través de diferencias de control de fuente legible.

Y optimice el proceso de instalación permitiendo que npm omita resoluciones de metadatos repetidos para paquetes instalados previamente ".

Editar

Para responder la pregunta de jrahhali a continuación sobre el uso de package.json con números de versión exactos. Tenga en cuenta que su package.json contiene solo sus dependencias directas, no las dependencias de sus dependencias (a veces llamadas dependencias anidadas). Esto significa que con el paquete estándar.json no puede controlar las versiones de esas dependencias anidadas, hacer referencia a ellas directamente o las dependencias pares no ayudarán, ya que tampoco controla la tolerancia de versión que sus dependencias directas definen para estas dependencias anidadas .

Incluso si bloquea las versiones de sus dependencias directas, no puede garantizar al 100% que su árbol de dependencias sea idéntico cada vez. En segundo lugar, es posible que desee permitir cambios sin interrupciones (basados ​​en versiones semánticas) de sus dependencias directas, lo que le brinda aún menos control de las dependencias anidadas, además de que no puede garantizar que sus dependencias directas no rompan en algún momento las reglas de versiones semánticas sí mismos.

La solución a todo esto es el archivo de bloqueo que, como se describió anteriormente, bloquea en las versiones del árbol de dependencias completo. Esto le permite garantizar su árbol de dependencias para otros desarrolladores o para versiones, al tiempo que permite probar nuevas versiones de dependencia (directas o indirectas) utilizando su package.json estándar.

NÓTESE BIEN. El encogimiento json anterior hizo más o menos lo mismo, pero el archivo de bloqueo lo renombra para que su función sea más clara. Si ya hay un archivo retráctil en el proyecto, se utilizará en lugar de cualquier archivo de bloqueo.


Es una mejora muy importante para npm: garantiza exactamente la misma versión de cada paquete .

¿Cómo asegurarse de que su proyecto se construyó con los mismos paquetes en diferentes entornos en un momento diferente? Digamos que puede usar ^1.2.3 en su package.json , o algunas de sus dependencias lo están usando de esa manera, pero ¿cómo puede asegurarse de que cada vez que npm install elija la misma versión en su máquina de desarrollo y en el servidor de compilación? package-lock.json se asegurará de eso.

npm install generará el archivo de bloqueo, cuando npm install en el servidor de compilación o en el servidor de implementación, haga npm ci (que leerá el archivo de bloqueo e instalará todo el árbol del paquete)


package-lock.json se genera automáticamente para cualquier operación en la que npm modifique el árbol node_modules o package.json. Describe el árbol exacto que se generó, de modo que las instalaciones posteriores pueden generar árboles idénticos, independientemente de las actualizaciones de dependencia intermedias.

Describe una representación única de un árbol de dependencias de modo que se garantiza que los compañeros de equipo, las implementaciones y la integración continua instalen exactamente las mismas dependencias. Contiene las siguientes propiedades.

{ "name": "mobileapp", "version": "1.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { "@angular-devkit/architect": { "version": "0.11.4", "resolved": "https://registry.npmjs.org/@angular- devkit/architect/-/architect-0.11.4.tgz", "integrity": "sha512-2zi6S9tPlk52vyqNFg==", "dev": true, "requires": { "@angular-devkit/core": "7.1.4", "rxjs": "6.3.3" } },

}


package-lock.json se escribe cuando un valor numérico en una propiedad como la propiedad "versión" o una propiedad de dependencia se cambia en package.json .

Si estos valores numéricos en package.json y package-lock.json coinciden, se lee package-lock.json .

Si estos valores numéricos en package.json y package-lock.json no coinciden, package-lock.json se escribe con esos nuevos valores y con nuevos modificadores como caret y tilde si están presentes. Pero es el número el que desencadena el cambio a package-lock.json .

Para ver a qué me refiero, haga lo siguiente. Usando package.json sin package-lock.json , ejecute npm install con:

{ "name": "test", "version": "1.0.0", ... "devDependencies": { "sinon": "7.2.2" } }

package-lock.json ahora tendrá:

"sinon": { "version": "7.2.2",

Ahora copie / pegue ambos archivos en un nuevo directorio. Cambie package.json a (solo agregando caret):

{ "name": "test", "version": "1.0.0", ... "devDependencies": { "sinon": "^7.2.2" } }

ejecuta npm install . Si no package-lock.json archivo package-lock.json , se instalaría [email protected]. npm install lee de package-lock.json e instala 7.2.2.

Ahora cambie package.json a:

{ "name": "test", "version": "1.0.0", ... "devDependencies": { "sinon": "^7.3.0" } }

ejecuta npm install . package-lock.json ha sido escrito y ahora mostrará:

"sinon": { "version": "^7.3.0",