Website-Icon Kreativdenker GmbH

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.

composer create-project laravel/laravel my-project-folder '8.*'

Die wichtigsten Befehle im Überblick

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.

Die mobile Version verlassen