Was sind die Unterschiede zwischen Composer-Update und Composer-Installation?

159

Was sind die Unterschiede zwischen composer updateund composer install?

Dawlatzai Ghousi
quelle

Antworten:

295

Komponisten-Update

composer update aktualisiert Ihre Abhängigkeiten wie in angegeben composer.json

Wenn Sie dieses Paket beispielsweise als Abhängigkeit benötigen:

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

Wenn Sie die 0.9.1Version des Pakets tatsächlich installiert haben , führt das Ausführen composer updatezu einem Upgrade dieses Pakets (z. B. auf 0.9.2, wenn es bereits veröffentlicht wurde).

im Detail composer updatewird:

  • Lesen composer.json
  • Entfernen Sie installierte Pakete, die in nicht mehr benötigt werden composer.json
  • Überprüfen Sie die Verfügbarkeit der neuesten Versionen Ihrer erforderlichen Pakete
  • Installieren Sie die neuesten Versionen Ihrer Pakete
  • Aktualisieren Sie composer.lock, um die installierte Paketversion zu speichern

Komponisten installieren

composer installwird nichts aktualisieren; Es werden nur alle in der composer.lockDatei angegebenen Abhängigkeiten installiert

Im Detail:

  • Überprüfen Sie, ob eine composer.lockDatei vorhanden ist (falls nicht, führen Sie sie aus composer-updateund erstellen Sie sie).
  • composer.lockDatei lesen
  • Installieren Sie die in der composer.lockDatei angegebenen Pakete

Wann zu installieren und wann zu aktualisieren

  • composer updatewird hauptsächlich in der 'Entwicklungsphase' verwendet, um unsere Projektpakete gemäß den Angaben in der composer.jsonDatei zu aktualisieren.

  • composer install wird hauptsächlich in der Bereitstellungsphase verwendet, um unsere Anwendung auf einem Produktionsserver oder in einer Testumgebung zu installieren, wobei dieselben Abhängigkeiten verwendet werden, die in der durch composer update erstellten Datei composer.lock gespeichert sind.

Moppo
quelle
5
Sie haben nicht beschrieben, was sein wird, wenn wir keine Sperrdatei haben und Composer installieren. Schöne Beschreibung übrigens.
user1954544
1
Wichtige Sache, die Sie eines Tages beißen könnte - Sperrdatei ist nicht rekursiv. Wenn ein Paket lose definierte Abhängigkeiten aufweist und Sie zufällig eine saubere Kopie eines Projekts auf einem sauberen Computer abrufen, werden möglicherweise verschiedene Versionen verschachtelter Abhängigkeiten installiert, die neue Fehler oder sogar fehlerhafte Änderungen enthalten können! Besonders relevant für die kontinuierliche Integration und den Aufbau von Servern. Die Lösung - suchen Sie nach dem verschachtelten problematischen Paket und fügen Sie seine feste gute Version zu json hinzu und sperren Sie die Datei.
JustAMartin
und composer global updateaktualisiert Abhängigkeiten in Ihrem globalen Repository vom lokalen System ( COMPOSER_HOMEenv-Variable)
Yousha Aleayoub
1
Wie kann ich dann ein bestimmtes Paket auf einem Produktionsserver sicher aktualisieren?
Michel
@ Michael Sie sollten zuerst composer updateauf Ihrem lokalen System ausführen und Ihre Anwendung testen, dann die composer.lock auf Ihren Produktionsserver hochladen und ausführencomposer install
Amin Shojaei
58

Wenn Sie es ausführen composer install, sucht es nach einer Sperrdatei und installiert alles, was darin enthalten ist. Wenn es keine findet, liest es composer.json, installiert seine Abhängigkeiten und generiert eine Sperrdatei.

Wenn Sie es ausführen, wird composer updatees einfach gelesen composer.json, installiert die Abhängigkeiten und aktualisiert die Sperrdatei (oder erstellt eine neue Sperrdatei).

Tim Sheehan
quelle
23

composer install

  1. Wenn composer.lockexistiert.
    • Verarbeitet und installiert Abhängigkeiten aus der composer.lockDatei.
  2. Wenn composer.locksie nicht existieren.
    • Prozesspaket wird von installiert composer.json.
    • Erstellt die composer.lockDatei basierend auf den installierten Paketen.

Stand: composer help install:

Der Befehl install liest die composer.lockDatei aus dem aktuellen Verzeichnis, verarbeitet sie und lädt alle in dieser Datei beschriebenen Bibliotheken und Abhängigkeiten herunter und installiert sie. Wenn die Datei nicht vorhanden ist, wird nach composer.jsondemselben gesucht und es wird dasselbe getan.


composer update

  1. Verarbeitet Abhängigkeiten von der composer.jsonDatei (installiert, aktualisiert und entfernt).
  2. Erstellt oder aktualisiert die composer.lockDatei entsprechend den Änderungen.

Stand: composer help update:

Der Befehl update liest die composer.jsonDatei aus dem aktuellen Verzeichnis, verarbeitet sie und aktualisiert, entfernt oder installiert alle Abhängigkeiten.


Siehe auch: Komponist: Alles dreht sich um die Sperrdatei

Kenorb
quelle
Composer-Installationspunkt 3 macht keinen Sinn. Wenn die .lock-Datei bereits vorhanden ist, wird sie nur gelesen und niemals "aktualisiert". Es wird nur erstellt, wenn es noch nicht existiert ..
Ben
@ Ben Ich habe die Punkte geklärt, lass es mich wissen, wenn sie jetzt Sinn machen.
Kenorb
3

Der beste Unterschied zwischen composer updateundcomposer install

Komponisten installieren

Um Abhängigkeiten hinzuzufügen, müssen Sie diese manuell zur Datei composer.json hinzufügen.

Wenn die Datei composer.lock vorhanden ist, installieren Sie genau das, was in dieser Datei angegeben ist

  • Lesen Sie andernfalls die Datei composer.json, um herauszufinden, welche Abhängigkeiten installiert werden müssen
  • Schreiben Sie die Datei composer.lock mit den Informationen des Projekts (installierte Abhängigkeiten).

Mit diesem Befehl wird keine Komponente aktualisiert.

Komponisten-Update

Um Abhängigkeiten hinzuzufügen oder zu entfernen, müssen Sie sie manuell zur Datei composer.json hinzufügen

  • Die Datei composer.lock wird ignoriert
  • Die Abhängigkeiten der Datei composer.json werden installiert und aktualisiert (wenn eine Abhängigkeit nicht installiert ist, wird sie heruntergeladen).

Wenn Sie die Bibliothek composer.json nicht manuell ändern können (oder nicht wissen, wie eine Bibliothek hinzugefügt oder entfernt werden kann, was in der Tat einfach ist, fügen Sie einfach den Namen der Abhängigkeit und Version in die Eigenschaft require der Datei ein) Verwenden Sie stattdessen lieber die Befehlszeile. Der Komponist hat hierfür spezielle Funktionen:

Komponist benötigen

Wenn wir beispielsweise eine Abhängigkeit mit der Befehlszeile hinzufügen möchten, werden wir einfach ausgeführt

composer require twig/twig

  • Die Datei composer.json wird automatisch geändert und die neue Abhängigkeit wird hinzugefügt
  • Die Abhängigkeit wird in das Projekt heruntergeladen

Komponist entfernen

Wenn Sie eine nicht verwendete Abhängigkeit entfernen möchten, führen wir einfach Folgendes aus:

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

  • Zweig wird mit all seinen Abhängigkeiten entfernt
Mayank Dudakiya
quelle
1

Komponisten installieren

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
}

Komponisten-Update

composer update = remove composer.lock -> composer install

Warum brauchen wir 2 Befehle. Ich denke, es kann durch composer.lock erklären.

Stellen Sie sich vor, wir NICHT haben composer.lockund in composer.json, gibt es eine Abhängigkeit "monolog/monolog": "1.0.*"oder "monolog/monolog": "^1.0".
Dann wird es einige Fälle geben

  • Wir arbeiten heute gut mit der aktuellen Abhängigkeitsversion (z. B. 1.0.0), aber einige Monate später hat das Abhängigkeitsupdate (z. B. 1.0.1) und möglicherweise einen Fehler
  • Ein anderes Teammitglied hat möglicherweise eine andere Abhängigkeitsversion, wenn es composer installzu einer anderen Zeit ausgeführt wird.

Was ist, wenn wir immer eine EXAKTE Version verwenden, composer.jsonwie z "monolog/monolog": "1.0.1".
Wir brauchen immer noch, composer.lockweil composer.jsonnur die Hauptversion Ihrer Abhängigkeit verfolgen kann, kann es nicht die Version der Abhängigkeiten der Abhängigkeit verfolgen.

Was ist, wenn alle Abhängigkeiten der Abhängigkeit auch die EXACT-Version verwenden?
Stellen Sie sich vor, Sie beginnen mit ALLEN Abhängigkeiten, die die EXACT-Version verwenden, und kümmern sich dann nicht darum composer.lock. Einige Monate später fügen Sie jedoch eine neue Abhängigkeit hinzu (oder aktualisieren die alte Abhängigkeit), und die Abhängigkeiten dieser Abhängigkeit verwenden nicht die EXACT-Version. Dann ist es besser, sich composer.lockam Anfang darum zu kümmern .

Außerdem gibt es einen Vorteil einer semantischen Version gegenüber einer exakten Version. Möglicherweise aktualisieren wir die Abhängigkeit während der Entwicklung mehrmals, und in der Bibliothek gibt es häufig kleine Änderungen, z. B. Fehlerbehebungen. Dann ist es einfacher, die Abhängigkeit zu aktualisieren, die eine semantische Version verwendet.

Phan Van Linh
quelle