Guten Tag.
Als ich mich zum ersten Mal mit Komponisten beschäftigte, entwarf ich mir einen kleinen Spickzettel und präsentiere ihn nach einer Weile der Öffentlichkeit in leicht modifizierter Form.
Diese Veröffentlichung ist relevant für diejenigen, die zum ersten Mal auf einen unverzichtbaren Paketmanager für PHP gestoßen sind.
Composer ist also ein Paketmanager für PHP.
Wofür ist Composer und das einfachste Beispiel für seine Verwendung?
Nehmen Sie
dieses Projekt als Beispiel.
Kurz gesagt: Dies ist eine Reihe von Skripten für die Arbeit in der VK-API
Dementsprechend benötigen Sie für den Betrieb dieser Skripte mehrere Bibliotheken
Bibliotheken werden in der Datei composer.json aufgelistet - eine Schlüsseldatei, wenn Sie mit Composer arbeiten
Beispiel composer.json:

Dieses Projekt verwendet 5 Bibliotheken. Wenn ein Entwickler beschließt, dieses Projekt auf github zu veröffentlichen, muss er lediglich den Skriptordner in der Rübe ablegen und composer.json erstellen, in der die Bibliotheken beschrieben werden, die für die Arbeit dieses Projekts erforderlich sind. Die Einfachheit liegt auf der Hand: Bei Rüben müssen Sie nicht alle erforderlichen Bibliotheken mit dem Trailer nach den Dateien ziehen. Es nimmt weniger Platz ein und ist einfacher zu verteilen.
Arbeitsbeispiel:
Laden Sie das Projekt herunter

Im Skriptordner befinden sich direkt Skripte des Projekts, für die diese 5 Pakete benötigt werden.
Wir starten die Installation von Paketen:

Nach der Installation wird der Herstellerordner angezeigt, in dem die installierten Pakete hinzugefügt und die Datei autoload.php erstellt werden

Wir verbinden diese Datei mit dem Projekt und das wars - die Bibliotheken sind verbunden, Sie können sicher damit arbeiten.

Die Einfachheit liegt auf der Hand: Sie müssen Bibliotheken und ihre Abhängigkeiten nicht selbst herunterladen und verbinden, der Komponist erledigt alles für Sie. Und dieses ganze Bundle ist mit einer einzigen autoload.php-Datei verbunden
Alle Pakete des Herstellers werden dem Autoloader hinzugefügt. Dabei stützt sich Composer auf composer.json-Dateien, die jedes Paket enthalten sollte. Die Bildung eines composer.json-Pakets ist die Aufgabe des Paketentwicklers. Der Verbraucher des Pakets muss im composer.json-Projekt lediglich beschreiben, welche Pakete verbunden werden müssen.
Dies ist ein Beispiel für ein composer.json-Projekt:

Dies ist ein Beispiel für ein composer.json-Paket:

Im Abschnitt "require" wird die Abhängigkeit dieses Pakets registriert - die guzzle http-Bibliothek, die erforderlich ist, damit die getjump / vk-Bibliothek funktioniert. In diesem Fall, d.h. Aus Sicht des Verbrauchers von Paketen sind alle Arten von Paketabhängigkeiten nicht unser „Anliegen“. Der Komponist wird die Abhängigkeiten selbst herausfinden.
Der Paket-Namespace ist im Abschnitt zum automatischen Laden registriert.

getjump \\ Vk \\ - Namespace-Name
src / getjump / Vk / - das Verzeichnis, in dem sich die Dateien mit den Paketklassen befinden
Arbeiten Sie mit dieser Bibliothek im Projekt:

Core and Friends sind Bibliotheksklassen, die gemäß dem PSR-4-Standard im src-Ordner angeordnet und registriert sind. Auch hier ist die Gestaltung der Paketstruktur Aufgabe des Paketerstellers.
Für uns als Verbraucher des Pakets reicht es aus, sich in unserem Projekt anzumelden
include '../vendor/autoload.php';
und all diese Klassen und Namespaces funktionieren einwandfrei.
In diesem Fall müssen wir keinen Autoloader schreiben. Composer erledigt dies selbst, wenn der Installationsbefehl ausgeführt wird.
Installation
Installieren Sie Composer global
1) Zuerst muss der Pfad zum Verzeichnis mit dem PHP-Interpreter im Pfad der Umgebungsvariablen registriert werden.
Überprüfen Sie, ob dies so ist:
PHP-Version

Wenn die Schlussfolgerung so ist, können Sie diesen Schritt überspringen
Zum Beispiel Windows 7
System -> Erweiterte Systemeinstellungen -> Erweitert -> Umgebungsvariablen
Als nächstes werden wir uns für die Pfadvariable interessieren:

Geben Sie den Pfad zum Dolmetscher ein


* Seit jeher habe ich die xampp-Assembly auf meinem Computer, die Assembly selbst wird hier nicht benötigt, aber der Interpreter davon ist durchaus geeignet (PHP-Version - 5.6).
2) Starten Sie das Terminal neu.
Erstellen Sie ein Verzeichnis und installieren Sie Composer (ich lege auf Festplatte D)
D:
cd /
mkdir bin
cd bin
php -r "readfile ('https://getcomposer.org/installer');" | php
echo
php "% ~ dp0composer.phar"% *> composer.bat

3) Fügen Sie den Pfad zu composer.bat zum Pfad der Umgebungsvariablen hinzu, z. B. für D: \ bin sollte dies funktionieren:

Kann zusätzlich zum Pfad hinzugefügt werden
D: \ Benutzer \% Benutzername% \ AppData \ Roaming \ Composer \ Vendor \ bin \
um die Verwendung von über Composer global installierten Tools zu vereinfachen.
(Ich habe den Benutzerordner auf Laufwerk D und ein Symlink wurde auf C dafür erstellt).
Das war's, der Komponist ist installiert und einsatzbereit.
Ein weiterer Grund: Während der Installation können Sie einen Fehler feststellen
[RuntimeException]
Die Umgebungsvariable APPDATA oder COMPOSER_HOME muss festgelegt sein, damit Composer ordnungsgemäß ausgeführt werden kann
Die Lösung wurde hier gefunden
github.com/composer/composer/issues/2033Fügen Sie die Variable APPDATA mit dem Wert D: \ Users \ GSU \ AppData \ Roaming hinzu

Installieren Sie Composer lokal
Es besteht die Möglichkeit, Composer lokal zu installieren, in den meisten Fällen besteht jedoch keine offensichtliche Notwendigkeit dafür.
Die Installation ist hier jedoch noch einfacher.
Weil Das Programm ist nicht global installiert. Sie benötigen eine Boot-Datei (Composer Mini-Programm). Zum Laden schreiben wir den folgenden Befehl:
php -r "readfile ('https://getcomposer.org/installer');" | php
Jetzt wurde die Datei composer.phar im Projektverzeichnis angezeigt
Alles kann benutzt werden.
php composer.phar erfordert [Paketname]
Unterschiede zwischen globaler und lokaler Installation
Befehle werden für lokale und globale Installationen unterschiedlich ausgeführt:
Zum Beispiel:
Lokal: Für php composer.phar ist silex / silex ~ 1.1 erforderlich
Global: Komponisten benötigen Silex / Silex ~ 1.1
Bei der lokalen Installation müssen Sie die Installationsdatei jedes Mal in den aktuellen Projektordner herunterladen
php -r "readfile ('https://getcomposer.org/installer');" | php
In einer globalen Installation wird diese Datei nicht benötigt. Composer startet in einem beliebigen aktuellen Verzeichnis.
Teams
install - Installieren Sie die in composer.json vorgeschriebenen Pakete
Update - Pakete aktualisieren
dumpautoload - Autoloader wird neu erstellt
somepackage / somepackage erfordern: someversion - ein neues Paket hinzufügen (standardmäßig werden Pakete aus dem offiziellen Repository installiert). Während der Installation wird das Paket in composer.json geschrieben
update --lock - Aktualisiert die Sperrdatei composer.lock
config --global cache-files-maxsize "2048MiB" - Beispiel für die Änderung eines Konfigurationsparameters
--profile - Durch Hinzufügen dieses Parameters zu einem Befehl können die Ausführungszeit und die verwendete Speichermenge angezeigt werden
--verbose - detaillierte Informationen über die ausgeführte Operation
show --installed - eine Liste der installierten Pakete mit jeweils einer Beschreibung
show --platform - PHP Informationen
--dry-run - Probe der Befehlsausführung. Es kann hinzugefügt werden, um Befehle zu installieren und zu aktualisieren. Emuliert die Ausführung eines Befehls, ohne ihn direkt auszuführen. Es ist erforderlich, um zu überprüfen, ob die Installation von Paketen und Abhängigkeiten erfolgreich ist.
entfernen - Paket entfernen. Genau das Gegenteil von erfordern
Syntax composer.json
Optionen für Paketnamen und Paketbeschreibung
Der Paketname besteht aus zwei Teilen, die durch einen Schrägstrich getrennt sind: dem Herstellernamen und dem Bibliotheksnamen.

Wenn das Paket gemäß dem PSR-4-Standard entworfen wurde, aber nicht auf packagist.org, sondern auf github veröffentlicht wird, müssen Sie anstelle der Paketversion einen Zweig und ein Repository für dieses Paket registrieren:

Ein Beispiel für das Verbinden einer Bibliothek, die auf Github liegt, jedoch nicht vom PSR-4-Standard umrahmt wird, sondern ein gewöhnlicher Stapel von Dateien mit Klassen und Funktionen ist.
Beispielansicht:

Pqr / superlib - dies ist dieselbe "falsche" Bibliothek.
Im Abschnitt Repositories schreiben wir eine solche Konstruktion dafür

Der entscheidende Punkt ist der Abschnitt zum automatischen Laden. Hier geben wir die benötigten Dateien mit Klassen und Funktionen an.
Bibliotheksstruktur:

Dateiinhalt:


Dementsprechend sieht der Aufruf von getCurrentTime () im Projekt ungefähr so aus:
$ timer = new pqr \ superlib \ TimerClass;
echo $ timer-> getCurrentTime ();
Versionierung
Bei der Angabe gültiger Paketversionen können Sie die genaue Entsprechung (1.2.3), Bereiche mit Vergleichsoperatoren (<1.2.3), Kombinationen dieser Operatoren (> 1.2.3 <1.3), "zuletzt verfügbar" (1.2. *), Tilde-Symbol verwenden (~ 1.2.3) und die Einfügemarke (^ 1.2.3).
Die Angabe der Tilde (~ 1.2.3) umfasst alle Versionen bis 1.3 (nicht inklusive), da dies bei der semantischen Versionierung der Moment der Einführung neuer Funktionen ist. In diesem Fall wird die letzte der stabilen Nebenversionen erhalten. Das heißt, Nur die letzte Ziffer ändert sich - 1.2.5, 1.2.8 usw.
Die Angabe eines Einfügezeichens (^ 1.2.3) bedeutet wörtlich „Vorsicht vor kritischen Änderungen“ und umfasst Versionen bis 2.0. In Bezug auf die semantische Versionierung ist eine Änderung in der Hauptversion der Moment, in dem kritische Änderungen am Projekt vorgenommen werden. Daher sind die Versionen 1.3, 1.4 und 1.9 geeignet, während 2.0 nicht mehr vorhanden ist.
Das heißt, nur die erste Ziffer ändert sich nicht.
Tilda: ~ 1.2.3 ist die häufigste und sicherste Methode, um eine Version anzugeben.
Datei composer.lock
Die Datei composer.lock speichert die aktuelle Liste der installierten Abhängigkeiten und deren Versionen. Zu dem Zeitpunkt, an dem die Abhängigkeitsversionen bereits aktualisiert wurden (Befehl update), erhalten andere Personen, die Ihr Projekt klonen, dieselben Versionen. Auf diese Weise können Sie sicherstellen, dass jeder, der Ihr Projekt erhält, über eine Stapelumgebung verfügt, die mit der während der Entwicklung verwendeten identisch ist, und Fehler vermeiden, die aufgrund von Versionsaktualisierungen auftreten können.
Jedes Mal, wenn der Aktualisierungsbefehl ausgeführt wird, werden Versionen der aktualisierten Pakete in composer.lock registriert. Diese Datei wird unter das Versionskontrollsystem übertragen. Bei der Installation von Paketen auf dem neuen Server werden die Versionen der Pakete geliefert, die in dieser Datei registriert sind. Bei der Ausführung des Installationsbefehls stützt sich Composer hauptsächlich auf composer.lock. Somit wird garantiert, dass dieselbe Paketumgebung in Bezug auf Versionen auf verschiedenen Servern installiert wird.
Außerdem enthält die Datei composer.lock einen Hash der Datei composer.json.
Wenn die JSON-Datei bearbeitet wurde, werden Sie vom Composer gewarnt, dass die Sperrdatei nicht mit der JSON-Datei übereinstimmt.
In diesem Fall müssen Sie den Befehl composer update --lock ausführen, mit dem composer.lock aktualisiert wird.




Der Unterschied zwischen Installation und Aktualisierung im Zusammenhang mit der Verwendung von composer.lock
Der Befehl
composer install führt folgende Aktionen aus:
Überprüft, ob composer.lock vorhanden ist:
- Wenn nicht, werden die Abhängigkeiten aufgelöst und erstellt
- Wenn composer.lock vorhanden ist, werden die darin angegebenen Versionen installiert
Composer-Aktualisierungsbefehl :
- Überprüft composer.json
- Bestimmt die neuesten Versionen basierend auf den in dieser Datei angegebenen
- Installiert die neuesten Versionen
- Aktualisiert composer.lock entsprechend der installierten
Anwendungsbeispiel aus Sicht des Projekterstellers
Es gibt ein Projekt ohne installierte Pakete

Stellen Sie einige Bibliotheken


Wir haben composer.json mit Paketinformationen gegründet

Wir können es ergänzen und das Projekt mit dieser Datei verteilen.

Ein anderer Benutzer hat unser Projekt heruntergeladen, die Installation ausgeführt und alle erforderlichen Pakete wurden in seinem Projekt bereitgestellt.

Beispielnutzung aus Sicht des Paketerstellers
Ich habe beispielsweise eine Klasse mit einer Methode erstellt, die die URL der aktuellen Seite anzeigt

Die Klasse ist als Paket konzipiert und wird auf github hochgeladen.


Zusammengestellt von composer.json

Ich melde mich im Büro an. Repositorys und fügen Sie ein Paket hinzu, das einen Link zu dem Repository angibt, in dem es sich befindet

Alle Pakete hinzugefügt


Ich überprüfe die Funktionalität des Pakets

Das Paket wurde geliefert, hier ist unsere Klasse:

Rufen Sie die Methode auf

Alles ok.

Komponist und PhpStorm
Initialisierung




Konfigurieren der Bearbeitungsfunktionen für Composer-Pakete

Wenn die Option aktiviert ist, ist es nicht so einfach, Dateien innerhalb des Anbieters / * / * aufzunehmen und zu bearbeiten.
Paketinstallation





Nuancen, Feinheiten, schwierige Situationen
Fehler: Warnung: Die Sperrdatei ist nicht auf dem neuesten Stand der Änderungen in composer.json. Möglicherweise erhalten Sie veraltete Abhängigkeiten. Führen Sie update aus, um sie zu aktualisieren. Nichts zu installieren oder zu aktualisieren
Lösung: Composer Update --lock
Das Update dauert lange, da eine große Anzahl von Bibliotheken installiert ist
Composer überprüft alle Abhängigkeiten von Paketen. Wenn viele Pakete vorhanden sind, dauert dies lange.
Lösung: Wenn Sie nur eine Bibliothek aktualisieren müssen, geben Sie diese explizit an:
Composer-Update-Paket / NameSie können auch den Parameter "--prefer-dist" hinzufügen (obwohl er theoretisch standardmäßig aktiviert sein sollte). Dann versucht Composer, die Bibliothek aus dem Zip-Archiv zu installieren, anstatt das Repository zu klonen.
Die Datei "****. Json" konnte nicht heruntergeladen werden: Stream konnte nicht geöffnet werden: HTTP-Anforderung fehlgeschlagen!
Composer versucht, das Paket über HTTP abzurufen, obwohl dies über HTTPS erfolgen muss
Lösung: Komponistenkonfiguration --global repo.packagist composer
packagist.orgDas Paket ist in einer Version mit ausreichender Stabilität gemäß Ihrer Mindeststabilitätseinstellung nicht verfügbar
siehe für weitere Details.
Das Paket hat keine stabile Version und die Installation der Entwicklerversion ist in der Konfiguration nicht zulässig.
Lösung: Setzen Sie entweder den Parameter "Minimum-Stabilität": "dev" und "Prefer-Stable": true, um möglichst stabile Versionen zu setzen, oder erstellen Sie - wenn dies Ihr eigenes Paket ist - ein Tag mit der Version (der stabile Aufkleber in der Readme-Datei auf Github sollte Version anzeigen)
Entwicklungsgeschichte und wichtige Veränderungen
- Die erste Veröffentlichung fand am 1. März 2012 statt und das gesamte Tool für 2012 wird aktiv weiterentwickelt
- Januar 2014 - Autoload basierend auf PSR-4 implementiert
- März 2016 - Die Beta-Version (1.0.0-Beta1) wurde veröffentlicht. Show --tree - Befehle zum Anzeigen installierter Pakete in einem Baum hinzugefügt. Warum - nicht - zeigt, warum es unmöglich ist, ein Paket zu installieren. Mit update --interactive können Sie auswählen, welche Pakete aktualisiert werden sollen, sowie viele andere Verbesserungen und Korrekturen.
- 4. April 2016 - Die erste stabile Version von Composer wurde eingeführt - 1.0.0
Dezember 2014 - einer der wichtigsten Commits für das Composer-Repository
github.com/composer/composer/commit/ac676f47f7bbc619678a29deae097b6b0710b799
Das Wesentliche der Änderung - Garbage Collector deaktiviert

habrastorage.org/getpro/habr/comment_images/db3/59a/972/db359a972df6730e52f292b5c52095b8.gifReferenzen
Offsite: getcomposer.org
Offizielles Paket-Repository: packagist.org
Composer-Repository:
github.com/composer/composerTolles Komponisten-
Tutorial :
daylerees.com/composer-primerBefehlsliste und ein detailliertes Beispiel für die Datei
composer.json :
composer.json.jolicode.com