Composer – Dependency Manager unter PHP

Web-Entwicklung
Composer – Dependency Manager unter PHP

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.

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 Befehl composer install installieren. Mit dem Befehl composer 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 von composer 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 der composer.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 Befehl composer 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 anhand composer.json.
  • composer require
    Fügt das gewünschte Paket der composer.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 die composer.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 oder composer update nothing
    Aktualisiert lediglich die composer.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.



Sie benötigen eine WordPress Agentur? Wir stehen als Ihre Experten zur Verfügung. Treten Sie mit uns in Kontakt und vereinbaren Sie ein unverbindliches Beratungsgespräch.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.