Composer ist ein Open Source Paketmanager für die Skriptsprache PHP. Damit lassen sich Abhängigkeiten (eng.: Dependencies) installieren. Composer wurde im Jahr 2012 von Nils Adermann, Jordi Boggiano und Mitwirkenden der GitHub-Community ins Leben gerufen und steht unter der MIT-Lizenz. Die Anwendung findet sich weiterhin auf GitHub und wird dort auch weiterentwickelt.
Inhaltsverzeichnis
Was ist Composer?
Spricht man über Softwareentwicklung, spricht man auch immer gleichzeitig von Automatisierung. Der Wunsch, repetitive Aufgaben zu automatisieren steckt tief im Wesen der Softwareentwicklung. Daraus hat sich die bekannte Abkürzung DRY entwickelt: Don’t Repeat Yourself. Damit ist gleichzeitig auch gemeint, die Arbeit anderer nicht zu wiederholen.
Dieser Ansatz kann als grundlegende Intention für Bibliotheken und Pakete verstanden werden. Bibliotheken und Pakete dienen dazu, bestimmte Module eines Programmes bereitzustellen. In Open Source Projekten können dutzende Entwickler Bibliotheken zur Verfügung stellen. Dabei ist es egal, ob sie dies im Namen einer Firma oder als Privatperson machen. In proprietären Anwendungen wird dies meist von dem Entwickler-Team des Urhebers realisiert. Das Resultat bleibt jedoch gleich: Eine große Anzahl an bereits fertigen Modulen, welche man für die Entwicklung seines eigenen Programmes verwenden kann.
Composer erleichtert den Zugriff auf solche Pakete und Bibliotheken. Dazu wird standardmäßig ein Package Repository namens Packagist verwendet. Es vereint verschiedene PHP-Pakete und stellt sie dem Paketmanagement-Programm Composer zur Verfügung. Es lassen sich jedoch auch eigene, zum Beispiel private, Repositories einbinden.
Anwendung in der Webentwicklung
Webprojekte werden immer komplexer. Egal ob durch die Anforderungen, oder weil viele verschiedene Komponenten verwendet werden. Dadurch entsteht zugleich ein hoher Aufwand beim Verwalten dieser Komponenten. Hier schafft Composer Abhilfe:
Mit Composer lassen sich PHP-Pakete und Bibliotheken ganz leicht installieren, aktualisieren und auch wieder löschen. Zu beachten gilt, dass nur solche Pakete aktualisiert oder gelöscht werden können, die zuvor über Composer installiert wurden. Sollte also eine Bibliothek manuell hinzugefügt worden sein, kann diese nicht von Composer abgedeckt werden.
Bei Composer handelt es sich um ein Kommandozeilen-Programm. Mit den Kommandozeilentools lassen sich alle wichtigen Aktionen ausführen, wie beispielsweise composer install
. Mit diesem Befehl lassen sich die gewünschten Pakete und Bibliotheken installieren, welche in der composer.json
-Datei vorher definiert wurden. Im Hauptverzeichnis des Projekts wird ganz einfach die composer.json
angelegt. Die Datei kann in etwa so aussehen:
{ "require": { "vendor/library": "version" } }
Ganz praktisch ist in der Kombination auch die composer.lock
-Datei, welche von Composer automatisch angelegt und verwaltet wird. In dieser Datei befinden sich alle aktuellen Versionen aller Pakete in einer Art Momentaufnahme. Die composer.lock
-Datei spiegelt wider, welche Version welches Paket zum aktuellen Zeitpunkt hat, und wird auch entsprechend aktualisiert. Die composer.json
hingegen stellt nur die Versions-Restriktion dar, in Form von Mindestanforderungen oder Maximalanforderungen.
Composer und WordPress
Auch eignet sich der Paketmanager hervorragend im Zusammenspiel mit WordPress. Um WordPress-Core, die Themes und Plugins zu verwalten und bereitzustellen, ist hoher manueller Aufwand nötig. Mit Composer lassen sich die WordPress-Module ganz leicht installieren, aktualisieren und auch wieder löschen – je nach Bedarf. Um Composer im WordPress-Bereich lauffähig zu bekommen, muss dafür zuerst aber das Package Repository ausgetauscht werden. Um alle wichtigen Pakete unter WordPress zu erhalten, benötigt man WPackagist. Dafür muss in der composer.json
folgende Änderung erfolgen:
{ "repositories":[ { "type":"composer", "url":"https://wpackagist.org" } ] }
Update-Konflikte vermeiden
Wie man sich nun vielleicht denken kann, birgt die Verwendung von Composer unter WordPress ein Risiko. Über das Admin Panel kann ein Administrator zusätzliche WordPress-Plugins per Hand installieren. Dies kann dafür sorgen, dass Composer nicht mehr synchronisiert ist. Die hinterlegten Versionen sind damit gegebenenfalls nicht mehr kompatibel. Leider gibt es noch keine elegante Lösung für dieses Problem. Als Admin der Webseite ist darauf zu achten, keine Installationen über das WordPress Admin Panel durchzuführen.
Composer in der WordPress Plugin-Entwicklung
Während die Installation von WordPress über Composer nicht der Norm entspricht, ist es für die Entwickler von WordPress-Plugins hingegen relativ üblich, Composer für deren Abhängigkeiten zu verwenden. So bietet ein WordPress-Plugin seine eigene composer.json
-Datei an, welche wiederum Abhängigkeiten für das Plugin definiert.
In Kombination mit Versionierungssoftware
Solche Konflikte können natürlich auch entstehen, wenn mehrere Personen an einem Projekt entwickeln. Gibt es keine koordinierte Kommunikation, kann es schnell passieren, dass Versionen nicht mehr übereinstimmen. Deshalb lässt sich Composer auch ganz einfach mit Versionierungssoftware wie git
kombinieren. Neben der composer.json
sollte auch die composer.lock
versioniert werden. So werden bei anderen Mitwirkenden die richtigen Paketversionen installiert.
Features
Composer besitzt eine Reihe nützlicher Features um das Verarbeiten und Bearbeiten von Bibliotheken und Paketen zu vereinfachen.
- Herunterladen benötigter Abhängigkeiten
Zu den einfachsten und simpelsten Funktionen gehört das Herunterladen und Einbinden von Paketen in ein Projekt. Wie bereits zuvor erwähnt, lässt sich jedes gewünschte PHP-Paket ganz einfach über den Befehlcomposer install
installieren. Mit dem Befehlcomposer update
werden Bibliotheken aktualisiert. - Neue Pakete herunterladen und einbinden
Besonders hervorstechen kann Composer durch seine intelligente Überprüfung von Abhängigkeiten. Wer kennt es nicht, dass beim Installieren von Paketen diese direkt fehlschlagen, weil gewisse andere Bibliotheken nicht vorhanden sind? Um das zu verhindern, überprüft Composer die hinterlegten Abhängigkeiten der Pakete im verwendeten Package Repository. Das Hinzufügen von neuen Paketen kann mithilfe voncomposer require
durchgeführt werden. - Systemanforderungen überprüfen
Composer prüft nicht nur die Abhängigkeiten der einzelnen Pakete untereinander, sondern auch, ob gegebene Systemvoraussetzungen erfüllt sind. So kann als Abhängigkeit etwa PHP in einer bestimmten Version definiert werden, oder aber auch eine Erweiterung wie etwa php-json. Sind diese Anforderungen auf dem Zielsystem nicht gegeben, schlägt die Installation fehl. - Versionskonflikte vermeiden
Auch wenn es unter WordPress noch kleine Stolpersteine gibt, sorgt Composer im Allgemeinen dafür, dass alle Versionen miteinander kompatibel bleiben. Die verwendeten Pakete hinterlegen dafür all ihre Abhängigkeiten. Composer kann diese dann prüfen und stellt sogar fest, wenn ein Update eine Abhängigkeit verletzen würde. So erhält man beispielsweise eine Warnung, wenn man Paket A updaten möchte, es aber eine Abhängigkeit zu Paket B gibt, welches noch nicht die neueste Version von Paket A unterstützt. - Updates präzise planen
Composer glänzt vor allem durch seine Präzision bei den Updates. So lässt sich in dercomposer.json
beispielsweise angeben, ob Minor-Updates (enthalten meist Bug Fixes) immer installiert werden sollen, dafür aber große Updates (häufig für große Änderungen bekannt, die das eigene Programm lahmlegen können) erst nach einer Überprüfung. So lässt sich kinderleicht die eigene Anwendung verwalten und große Ausfälle durch Updates nahezu vermeiden. - Projekte aus einem bestehenden Paket erstellen
Mit dem Befehlcomposer create-project
lässt sich ganz einfach ein Projekt aus einem gewünschten Paket erstellen. Composer greift dabei auf das hinterlegte Package Repository zurück und sucht nach dem gewünschten Paket. So lassen sich neue Projekte schnell vorkonfiguriert starten. Dabei kann bereits direkt eine Versions-Restriktion angegeben werden. Hier ein Beispiel dafür:
composer create-project laravel/laravel my-project-folder '8.*'
Die wichtigsten Befehle im Überblick
composer install
Installiert die bestehenden Paket-Abhängigkeiten anhandcomposer.json
.composer require
Fügt das gewünschte Paket dercomposer.json
hinzu, sowie alle damit verbundenen Abhängigkeiten.composer create-project
Erstellt ein Projekt aus dem erwähnten Paket.composer update
Die neuesten Versionen eines oder aller Pakete werden installiert und diecomposer.lock
wird aktualisiert.composer remove
Entfernt ein oder mehrere ausgewählte Pakete.composer search
Durchsucht das hinterlegte Package Repository nach dem genannten Paket.composer outdated
Überprüft ob es Updates für Pakete gibt.composer why
Gibt zurück, wieso ein Update oder eine Installation ausgeführt wurde. Beispielsweise, wenn dieses Paket als Abhängigkeit mitinstalliert wurde.composer why-not
Gibt zurück, wieso eine Installation nicht stattgefunden hat.composer update --lock
odercomposer update nothing
Aktualisiert lediglich diecomposer.lock
-Datei
Zusammenfassung
Der Paketmanager Composer ist ein starkes und hilfreiches Tool zur Verwaltung von Paketen und Bibliotheken. Anstatt aufwendig alle Pakete einzeln zu aktualisieren und zu überprüfen, übernimmt Composer diese repetitive Aufgabe für einen und überprüft gleichzeitig alle wichtigen Abhängigkeiten der Pakete untereinander. Composer lohnt sich bereits bei kleineren Webseiten, aber zeigt sein wahres Potenzial gerade bei großen, komplexen Anwendungen.