¿Cuáles son las diferencias entre la actualización del compositor y la instalación del compositor?

160

¿Cuáles son las diferencias entre composer updatey composer install?

Dawlatzai Ghousi
fuente

Respuestas:

297

actualización del compositor

composer update actualizará sus dependencias como se especifican en composer.json

Por ejemplo, si necesita este paquete como dependencia:

"mockery/mockery": "0.9.*",

y realmente ha instalado la 0.9.1versión del paquete, la ejecución composer updateprovocará una actualización de este paquete (por ejemplo 0.9.2, si ya se ha lanzado)

en detalle composer update:

  • Leer composer.json
  • Elimine los paquetes instalados que ya no son necesarios en composer.json
  • Verifique la disponibilidad de las últimas versiones de sus paquetes requeridos
  • Instala las últimas versiones de tus paquetes
  • Actualización composer.lockpara almacenar la versión de los paquetes instalados

instalación del compositor

composer installno actualizará nada; solo instalará todas las dependencias como se especifica en el composer.lockarchivo

En detalle:

  • Compruebe si composer.lockexiste el archivo (si no, ejecútelo composer-updatey créelo)
  • Leer composer.lockarchivo
  • Instale los paquetes especificados en el composer.lockarchivo

Cuándo instalar y cuándo actualizar

  • composer updatese usa principalmente en la 'fase de desarrollo', para actualizar nuestros paquetes de proyecto de acuerdo con lo que hemos especificado en el composer.jsonarchivo,

  • composer install se utiliza principalmente en la 'fase de implementación' para instalar nuestra aplicación en un servidor de producción o en un entorno de prueba, utilizando las mismas dependencias almacenadas en el archivo composer.lock creado por la actualización del compositor.

Moppo
fuente
55
No describió lo que será si no tenemos un archivo de bloqueo y llamamos a instalar Composer. Bonita descripción por cierto.
user1954544
1
Algo importante que podría morderte algún día: el archivo de bloqueo no es recursivo. Si algún paquete tiene dependencias poco definidas y si tiene una copia limpia de un proyecto en una máquina limpia, puede instalar diferentes versiones de dependencias anidadas, que pueden incluir nuevos errores o incluso cambios importantes. Especialmente relevante en integración continua y servidores de compilación. La solución: buscar el paquete problemático anidado y agregar su buena versión fija a json y bloquear el archivo.
JustAMartin
y composer global updateactualiza las dependencias en su repositorio global en el sistema local ( COMPOSER_HOMEvariable env)
Yousha Aleayoub
1
Entonces, ¿cómo podría actualizar de forma segura un paquete específico en un servidor de producción?
Michel
@Michel Primero debe ejecutar composer updateen su sistema local y probar su aplicación, luego cargar el composer.lock en su servidor de producción y ejecutarcomposer install
Amin Shojaei
58

Cuando lo ejecute composer install, buscará un archivo de bloqueo e instalará todo lo que contenga; si no puede encontrar uno, leerá composer.json, instalará sus dependencias y generará un archivo de bloqueo.

Cuando lo ejecuta composer update, simplemente lee composer.json, instala las dependencias y actualiza el archivo de bloqueo (o crea un nuevo archivo de bloqueo).

Tim Sheehan
fuente
23

composer install

  1. Si composer.lock existe
    • Procesa e instala dependencias del composer.lockarchivo.
  2. Si composer.locklo hace , no existir.
    • Procesar instalaciones de paquetes desde composer.json .
    • Crea el composer.lockarchivo basado en los paquetes instalados.

Según composer help install:

El comando de instalación lee el composer.lockarchivo desde el directorio actual, lo procesa y descarga e instala todas las bibliotecas y dependencias descritas en ese archivo. Si el archivo no existe, buscará composer.jsony hará lo mismo.


composer update

  1. Procesa dependencias de la composer.json archivo (instala, actualiza y elimina).
  2. Crea o actualiza el composer.lockarchivo de acuerdo con los cambios.

Según composer help update:

El comando de actualización lee el composer.jsonarchivo del directorio actual, lo procesa y actualiza, elimina o instala todas las dependencias.


Ver también: Compositor: se trata del archivo de bloqueo

kenorb
fuente
el punto de instalación del compositor 3 no tiene sentido. Si el archivo .lock ya existe, solo lo leerá y nunca lo "actualizará". Solo se crea si aún no existe ..
Ben
@Ben he aclarado los puntos, avísame si tienen sentido ahora.
Kenorb
3

La mejor diferencia entre composer updateycomposer install

instalación del compositor

Para agregar dependencias, debe agregarlo manualmente al archivo composer.json.

Si existe el archivo composer.lock, instale exactamente lo que se especifica en este archivo

  • De lo contrario, lea el archivo composer.json para ver qué dependencias deben instalarse
  • Escriba composer.lock con la información del proyecto (dependencias instaladas)

No se actualizará ningún componente con este comando.

actualización del compositor

Para agregar o eliminar dependencias, debe agregarlo manualmente al archivo composer.json

  • El archivo composer.lock será ignorado
  • Las dependencias del archivo composer.json se instalarán y actualizarán (si no se instala una dependencia, se descargará)

Si no puede (o no sabe cómo agregar o eliminar una biblioteca que de hecho es fácil, simplemente agregue el nombre de la dependencia y la versión en la propiedad require del archivo) modifique el archivo composer.json manualmente o usted prefiero usar la línea de comando, el compositor tiene funciones especiales para esto:

compositor requiere

Por ejemplo, si queremos agregar una dependencia con la línea de comando, simplemente ejecutaremos

composer require twig/twig

  • El archivo composer.json se modificará automáticamente y se agregará la nueva dependencia
  • la dependencia se descargará al proyecto

compositor eliminar

Si desea eliminar una dependencia no utilizada, ejecutaremos simplemente:

composer remove twig/twig --update-with-dependencies

  • Twig se eliminará con todas sus dependencias
Mayank Dudakiya
fuente
1

instalación del compositor

if(composer.lock existed){
   installs dependency with EXACT version in composer.lock file
} else {
   installs dependency with LATEST version in composer.json
   generate the composer.lock file
}

actualización del compositor

composer update = remove composer.lock -> composer install

Por qué necesitamos 2 comandos. Creo que se puede explicar por composer.lock.

Imagínese, NO tenemos composer.locky en composer.json, hay una dependencia "monolog/monolog": "1.0.*"o "monolog/monolog": "^1.0".
Entonces, tendrá algunos casos

  • Hoy trabajamos bien con la versión de dependencia actual (p. Ej .: 1.0.0), pero unos meses después, la actualización de dependencia (p. Ej .: 1.0.1) y es posible que tenga algún error
  • Otro miembro del equipo puede tener una versión de dependencia diferente si se ejecutan composer installen un momento diferente.

¿Qué pasa si siempre usamos una versión EXACTA composer.jsoncomo en "monolog/monolog": "1.0.1"?
Todavía necesitamos composer.lockporquecomposer.json solo rastrea la versión principal de su dependencia, no puede rastrear la versión de dependencias de dependencia.

¿Qué pasa si todas las dependencias de dependencia también usan la versión EXACT?
Imagine que comienza con TODAS las dependencias que usan la versión EXACTA, entonces no le importa composer.lock. Sin embargo, unos meses después, agrega una nueva dependencia (o actualiza la antigua), y las dependencias de esta dependencia no usan la versión EXACT. Entonces es mejor cuidar composer.lockal principio.

Además de eso, hay una ventaja de una versión semántica sobre una versión exacta. Podemos actualizar la dependencia muchas veces durante el desarrollo y la biblioteca a menudo tiene algunos pequeños cambios, como la corrección de errores. Entonces es más fácil actualizar la dependencia que usa la versión semántica.

Phan Van Linh
fuente