Composer — Abhängigkeitsverwaltung für PHP
Praxis-Guide zu Composer — Abhängigkeitsmanager für PHP: Pakete installieren, Versionen verwalten und das Autoloading optimieren.
Composer ist das zentrale Werkzeug zur Abhängigkeitsverwaltung in der PHP-Welt – es installiert Bibliotheken, hält ihre Versionen sauber im Griff und erzeugt das Autoloading, damit du Klassen ohne manuelle require-Zeilen nutzen kannst. Über das zentrale Paket-Verzeichnis Packagist ziehst du mit wenigen Befehlen alles von Guzzle bis zum kompletten Laravel-Framework in dein Projekt. Dieser Guide führt dich durch den Alltag: Projekt aufsetzen, Pakete einbinden und aktualisieren, Versionen mit Constraints steuern und den Autoloader für die Produktion optimieren.
Projekt aufsetzen
composer init — Erstellt interaktiv eine neue composer.json im aktuellen Verzeichnis.
composer initcomposer init --name=<vendor>/<package> — Erstellt eine neue composer.json mit vorgegebenem Paketnamen.
composer init --name=acme/my-projectcomposer create-project <package> <directory> — Erstellt ein neues Projekt aus einem bestehenden Paket (wie Klonen + Installieren).
composer create-project laravel/laravel my-appcomposer create-project <package> <directory> <version> — Erstellt ein neues Projekt aus einer bestimmten Version eines Pakets.
composer create-project laravel/laravel my-app "11.*"Pakete installieren
composer install — Installiert alle in composer.lock definierten Abhängigkeiten (oder aus composer.json, falls keine Lock-Datei existiert).
composer installcomposer install --no-dev — Installiert nur Produktions-Abhängigkeiten und überspringt require-dev-Pakete.
composer install --no-devcomposer install --optimize-autoloader — Installiert die Abhängigkeiten und erzeugt eine optimierte Class-Map fürs Autoloading.
composer install --optimize-autoloadercomposer install --no-scripts — Installiert die Abhängigkeiten, ohne in composer.json definierte Skripte auszuführen.
composer install --no-scriptscomposer install --dry-run — Simuliert die Installation, ohne tatsächlich etwas zu verändern.
composer install --dry-runPakete einbinden (require)
composer require <package> — Fügt ein Paket zu require hinzu und installiert es.
composer require guzzlehttp/guzzlecomposer require <package>:<version> — Bindet eine bestimmte Version oder ein Versions-Constraint eines Pakets ein.
composer require guzzlehttp/guzzle:^7.0composer require --dev <package> — Fügt ein Paket als Entwicklungs-Abhängigkeit hinzu (require-dev).
composer require --dev phpunit/phpunitcomposer require <package> --with-all-dependencies — Erlaubt beim Einbinden, alle Abhängigkeiten (auch bereits installierte) zu aktualisieren.
composer require symfony/console --with-all-dependenciescomposer require <package> -W — Kurzform von --with-all-dependencies.
composer require laravel/framework -WPakete aktualisieren
composer update — Aktualisiert alle Abhängigkeiten auf die neuesten Versionen im Rahmen der composer.json-Constraints.
composer updatecomposer update <package> — Aktualisiert ein einzelnes Paket auf seine neueste erlaubte Version.
composer update guzzlehttp/guzzlecomposer update <package1> <package2> — Aktualisiert mehrere bestimmte Pakete auf einmal.
composer update symfony/console symfony/http-foundationcomposer update --with-all-dependencies — Aktualisiert zusätzlich die Abhängigkeiten der aktualisierten Pakete.
composer update --with-all-dependenciescomposer update --no-dev — Aktualisiert nur Produktions-Abhängigkeiten.
composer update --no-devcomposer update --dry-run — Zeigt eine Vorschau der Aktualisierungen, ohne tatsächlich etwas zu ändern.
composer update --dry-runcomposer update --prefer-lowest — Aktualisiert auf die niedrigstmöglichen Versionen im Rahmen der Constraints. Nützlich, um die Kompatibilität zu testen.
composer update --prefer-lowestPakete entfernen
composer remove <package> — Entfernt ein Paket aus require und deinstalliert es.
composer remove guzzlehttp/guzzlecomposer remove --dev <package> — Entfernt ein Paket aus require-dev.
composer remove --dev phpunit/phpunitcomposer remove <package> --no-update — Entfernt ein Paket aus composer.json, ohne die Lock-Datei zu aktualisieren.
composer remove monolog/monolog --no-updateInformationen & Suche
composer show — Listet alle installierten Pakete mit ihren Versionen auf.
composer showcomposer show <package> — Zeigt detaillierte Informationen zu einem bestimmten installierten Paket.
composer show guzzlehttp/guzzlecomposer show --tree — Zeigt die installierten Pakete als Abhängigkeitsbaum.
composer show --treecomposer show --outdated — Listet installierte Pakete auf, für die neuere Versionen verfügbar sind.
composer show --outdatedcomposer show --direct — Zeigt nur direkt eingebundene Pakete (keine transitiven Abhängigkeiten).
composer show --directcomposer search <keyword> — Sucht auf Packagist anhand eines Stichworts nach Paketen.
composer search markdown parsercomposer depends <package> — Zeigt, welche Pakete von einem bestimmten Paket abhängen (umgekehrte Abhängigkeitssuche).
composer depends psr/logcomposer why <package> — Alias für depends. Zeigt, warum ein Paket installiert ist.
composer why symfony/polyfill-mbstringcomposer why-not <package> <version> — Zeigt, warum ein Paket nicht auf eine bestimmte Version aktualisiert werden kann.
composer why-not laravel/framework 11.0Lock-Datei & Autoloader
composer dump-autoload — Erzeugt die Autoloader-Dateien neu, ohne Pakete zu installieren oder zu aktualisieren.
composer dump-autoloadcomposer dump-autoload --optimize — Erzeugt einen optimierten Autoloader mit Class-Map für bessere Performance.
composer dump-autoload --optimizecomposer dump-autoload --classmap-authoritative — Nutzt ausschließlich die Class-Map fürs Autoloading. Am schnellsten, findet aber neue Klassen nicht automatisch.
composer dump-autoload --classmap-authoritativecomposer validate — Prüft composer.json und composer.lock auf Fehler.
composer validatecomposer validate --strict — Prüft mit strengen Checks. Liefert auch bei Warnungen einen Exit-Code ungleich null.
composer validate --strictVersions-Constraints
composer require <package>:^<version> — Caret-Constraint. Erlaubt Updates, die die erste Ziffer ungleich null nicht verändern (empfohlen).
composer require guzzlehttp/guzzle:^7.5composer require <package>:~<version> — Tilde-Constraint. Erlaubt Updates nur an der letzten angegebenen Stelle.
composer require monolog/monolog:~2.0composer require <package>:<exact_version> — Bindet eine exakte Version ein. Keine Updates erlaubt.
composer require phpunit/phpunit:10.5.3composer require <package>:">=<min> <<max>" — Nutzt einen Versionsbereich mit Vergleichsoperatoren.
composer require monolog/monolog:">=2.0 <3.0"composer require <package>:* — Wildcard-Constraint. Erlaubt jede Version (für Produktion nicht empfohlen).
composer require acme/internal-lib:*composer require <package>:dev-<branch> — Bindet einen bestimmten Branch (Entwicklungsversion) eines Pakets ein.
composer require acme/lib:dev-mainSkripte & Hooks
composer run-script <script> — Führt ein im scripts-Abschnitt der composer.json definiertes Skript aus.
composer run-script testcomposer run <script> — Kurz-Alias für run-script.
composer run lintcomposer run-script --list — Listet alle in composer.json definierten Skripte auf.
composer run-script --listcomposer exec <binary> — Führt ein Binary aus dem Verzeichnis vendor/bin aus.
composer exec phpunit -- --filter=MyTestGlobale Pakete
composer global require <package> — Installiert ein Paket global (systemweit verfügbar).
composer global require laravel/installercomposer global show — Listet alle global installierten Pakete auf.
composer global showcomposer global update — Aktualisiert alle global installierten Pakete.
composer global updatecomposer global remove <package> — Entfernt ein global installiertes Paket.
composer global remove laravel/installerCache & Diagnose
composer clear-cache — Leert den internen Paket-Cache.
composer clear-cachecomposer diagnose — Führt Diagnose-Checks für häufige Probleme durch (Verbindung, Berechtigungen usw.).
composer diagnosecomposer self-update — Aktualisiert Composer selbst auf die neueste Version.
composer self-updatecomposer self-update --rollback — Setzt Composer auf die zuvor installierte Version zurück.
composer self-update --rollbackcomposer config --list — Listet alle aktuellen Konfigurationswerte auf.
composer config --listcomposer config --global home — Zeigt den Pfad des Composer-Home-Verzeichnisses.
composer config --global homeRepositories & Plattformen
composer config repositories.<name> vcs <url> — Fügt ein VCS-Repository (Git) als Paketquelle hinzu.
composer config repositories.my-lib vcs https://github.com/acme/my-lib.gitcomposer config repositories.<name> path <path> — Fügt ein lokales Pfad-Repository für die Entwicklung hinzu.
composer config repositories.local-lib path ../my-libcomposer config repositories.<name> '{"type": "composer", "url": "<url>"}' — Fügt ein privates Composer-Repository hinzu (z. B. Private Packagist, Satis).
composer config repositories.private '{"type": "composer", "url": "https://packages.example.com"}'composer config platform.php <version> — Täuscht die PHP-Version für die Abhängigkeitsauflösung vor (nützlich, um auf ein Deployment-Ziel zu zielen).
composer config platform.php 8.2.0 Fazit
Composer nimmt dir die mühsame Verwaltung von PHP-Abhängigkeiten ab – der Schlüssel zu reproduzierbaren Builds ist dabei die composer.lock. Merke dir den Unterschied: composer update löst Versionen neu auf und schreibt die Lock-Datei um, während composer install exakt die dort festgehaltenen Versionen installiert. In der Produktion solltest du deshalb fast immer nur install ausführen und update der lokalen Entwicklung überlassen. Für Deployments lohnen sich --no-dev und ein optimierter Autoloader (-o bzw. --optimize-autoloader), damit keine Test-Werkzeuge und kein unnötiger Overhead auf dem Server landen. Behalte im Hinterkopf, dass Composer-Skripte und -Plugins beliebigen Code ausführen – bei fremden Paketen ist --no-scripts ein sinnvoller Schutz, und secure-http (Standard) sollte aktiviert bleiben, damit Pakete ausschließlich über HTTPS geladen werden.
Weiterführende Links
- Composer-Dokumentation – offizielle Anleitung und Befehlsreferenz (englisch)
- Packagist – das zentrale Paket-Verzeichnis für PHP (englisch)
- Versions and constraints – ausführliche Erklärung der Versions-Constraints (englisch)