Composer: Abhängigkeiten in PHP-Projekten verwalten
Jedes ernsthafte PHP-Projekt nutzt fremden Code. Composer sorgt dafür, dass auf dem Entwicklungsrechner, im Test und auf dem Server exakt dieselben Fassungen laufen — vorausgesetzt, man verwendet ihn richtig.
Das lernen Sie
Zwei Dateien, zwei Aufgaben
`composer.json` beschreibt, was Sie wollen: welche Pakete und in welchem Spielraum. `composer.lock` hält fest, was dabei herausgekommen ist: jedes Paket mit genau einer Version und einer Prüfsumme.
{ "require": { "php": ">=8.2", "monolog/monolog": "^3.5" }, "require-dev": { "phpunit/phpunit": "^11.0" } }Bei einer Anwendung gehören beide Dateien in die Versionsverwaltung — auch die Sperrdatei, gerade die. Bei Bibliotheken, die andere als Paket einbinden, wird sie oft weggelassen, weil sie für deren Nutzer ohne Wirkung ist. Sie ist der Grund, warum ein Kollege und der Server denselben Stand bekommen wie Sie.
install und update verwechselt man genau einmal
Ein `composer update` auf dem Server ist ein Vorgang, dessen Ergebnis niemand vorher gesehen hat. Dasselbe gilt für `composer update` kurz vor einer Auslieferung.
Ein Beispiel aus der Praxis
Wenn Installation und Sperrdatei auseinanderlaufen
Ein Entwicklungsbaum, in dem nach einem Wechsel der Sperrdatei nie `composer install` lief, trägt andere Paketversionen, als das Projekt vorsieht. Die Folge ist ein Fehlerbild, das in die Irre führt: Tests scheitern reihenweise in einem Bereich, den niemand angefasst hat.
Deshalb lohnt sich eine automatische Prüfung, die bei jedem Testlauf mitläuft und genau das meldet — ein Abgleich der installierten Pakete gegen die Sperrdatei. Ein Fehlerbündel in einem Bereich, den niemand angefasst hat, ist ein typisches Anzeichen für abweichende Paketversionen und sollte deshalb zuerst gegen die Sperrdatei geprüft werden; andere Ursachen sind damit nicht ausgeschlossen.
Was im Betrieb zählt
Häufige Missverständnisse
Weiterführende Quellen
- Composer: Dokumentation das offizielle Handbuch
- Composer: Versionen und Spielräume was ^, ~ und * bedeuten
- Packagist das Verzeichnis der öffentlichen Pakete
Über den Autor
Fabian Lücker ist geschäftsführender Gesellschafter der PHP-Schmiede KG in Rheine und seit 2007 in der Softwareentwicklung tätig. Er verantwortet Entwicklung und Konzeption und schreibt hier über Entscheidungen, die in echten Projekten anfallen.