Benutzer-Werkzeuge

Webseiten-Werkzeuge


werkzeuge:composer:start

Composer


Composer ist ein Paket- und Abhängigkeitsmanager für PHP.

Mit Composer werden PHP-Bibliotheken und Frameworks installiert, aktualisiert und verwaltet.

In meinen Projekten wird Composer insbesondere für Laravel und damit für die Entwicklung von RoWaBase eingesetzt.

Composer-Version anzeigen

Die installierte Composer-Version kann in der Kommandozeile geprüft werden:

composer --version

Kurzform:

composer -V

Grundprinzip

Ein PHP-Projekt kann von zahlreichen externen Paketen abhängig sein.

Composer verwaltet:

  • welche Pakete benötigt werden
  • welche Versionen zulässig sind
  • welche konkreten Versionen installiert sind
  • Abhängigkeiten zwischen den Paketen
  • das automatische Laden von PHP-Klassen

Die wichtigsten Bestandteile sind:

composer.json
composer.lock
vendor/

composer.json

Die Datei composer.json beschreibt die Anforderungen des Projekts.

Sie befindet sich normalerweise im Stammverzeichnis.

Beispiel:

E:\xampp\htdocs\rowabase\composer.json

Darin werden unter anderem die benötigte PHP-Version und die verwendeten Pakete definiert.

Ein vereinfachtes Beispiel:

{
    "require": {
        "php": "^8.2",
        "laravel/framework": "^12.0"
    }
}

Die Datei composer.json gehört zur Projektdefinition und wird deshalb mit Git versioniert.


composer.lock

Die Datei composer.lock enthält die konkret aufgelösten Paketversionen.

Während composer.json beispielsweise einen zulässigen Versionsbereich beschreiben kann, hält composer.lock fest, welche Version tatsächlich installiert wurde.

Dadurch können verschiedene Entwicklungsumgebungen denselben Paketstand verwenden.

Die Datei:

composer.lock

sollte bei Anwendungen wie RoWaBase ebenfalls mit Git versioniert werden.


vendor-Verzeichnis

Composer installiert die PHP-Pakete standardmäßig in:

vendor/

Dieses Verzeichnis kann sehr viele Dateien enthalten.

Es wird normalerweise nicht mit Git versioniert.

Bei Laravel befindet sich deshalb typischerweise folgender Eintrag in .gitignore:

/vendor

Die benötigten Dateien können anhand von composer.json und composer.lock jederzeit wieder installiert werden.


Abhängigkeiten installieren

Sind composer.json und composer.lock vorhanden, werden die festgelegten Pakete installiert mit:

composer install

Composer verwendet dabei die in composer.lock festgelegten Versionen.

Dieser Befehl ist beispielsweise wichtig, nachdem ein bestehendes Projekt auf einen anderen Rechner kopiert oder aus einem Git-Repository ausgecheckt wurde.


install und update

install und update haben unterschiedliche Aufgaben.

Installieren des festgelegten Projektstands:

composer install

Dabei werden möglichst genau die Versionen aus composer.lock installiert.

Abhängigkeiten aktualisieren:

composer update

Dabei löst Composer die Abhängigkeiten anhand der Regeln in composer.json neu auf und aktualisiert anschließend auch composer.lock.

composer update sollte nicht einfach routinemäßig ausgeführt werden.

Es kann zahlreiche Paketversionen verändern und damit einen größeren technischen Eingriff in das Projekt darstellen.


Neues Paket installieren

Ein zusätzliches PHP-Paket wird mit require in das Projekt aufgenommen:

composer require hersteller/paket

Composer:

  • sucht eine passende Version
  • installiert das Paket
  • aktualisiert composer.json
  • aktualisiert composer.lock

Die Änderungen an composer.json und composer.lock sollten anschließend gemeinsam mit dem dazugehörigen Anwendungscode in Git gespeichert werden.


Entwicklungsabhängigkeiten

Pakete, die nur während der Entwicklung benötigt werden, können als Entwicklungsabhängigkeit installiert werden:

composer require --dev hersteller/paket

Sie erscheinen in composer.json unter:

require-dev

Typische Beispiele sind Test-, Analyse- oder Entwicklungswerkzeuge.


Paket entfernen

Ein installiertes Paket kann entfernt werden mit:

composer remove hersteller/paket

Composer passt dabei die Projektabhängigkeiten entsprechend an.


Installierte Pakete anzeigen

Eine Übersicht der installierten Composer-Pakete:

composer show

Informationen zu einem bestimmten Paket:

composer show hersteller/paket

Veraltete Pakete anzeigen

Mit:

composer outdated

kann geprüft werden, für welche installierten Pakete neuere Versionen verfügbar sind.

Das bedeutet jedoch nicht automatisch, dass alle angezeigten Pakete sofort aktualisiert werden sollten.

Vor Aktualisierungen sollten insbesondere Kompatibilität und Auswirkungen auf die Anwendung geprüft werden.


Autoloading

Composer stellt einen Autoloader für PHP-Klassen bereit.

Dadurch müssen Klassen nicht einzeln mit require oder include eingebunden werden.

Laravel verwendet dieses Verfahren intensiv.

Die Zuordnung der eigenen Anwendungsklassen wird unter anderem in composer.json beschrieben.

Typisch für Laravel:

"autoload": {
    "psr-4": {
        "App\\": "app/",
        "Database\\Factories\\": "database/factories/",
        "Database\\Seeders\\": "database/seeders/"
    }
}

Dadurch kann beispielsweise:

App\Models\Objekt

automatisch der entsprechenden PHP-Datei unter app/ zugeordnet werden.


Autoloader neu erzeugen

Nach bestimmten Änderungen an Klassen oder Autoload-Konfigurationen kann der Autoloader neu aufgebaut werden:

composer dump-autoload

Normalerweise ist dieser Schritt bei der täglichen Laravel-Entwicklung nicht nach jeder Änderung erforderlich.


Composer-Diagnose

Bei Problemen mit der Composer-Installation oder Umgebung kann eine Diagnose durchgeführt werden:

composer diagnose

Composer prüft dabei verschiedene Aspekte der lokalen Konfiguration.


composer validate

Die composer.json und teilweise auch der zugehörige Lock-Stand können geprüft werden mit:

composer validate

Dies ist insbesondere nach manuellen Änderungen an composer.json sinnvoll.


Composer und PHP

Composer selbst benötigt PHP.

Deshalb hängen Composer-Probleme häufig auch mit der verwendeten PHP-Version oder fehlenden PHP-Extensions zusammen.

PHP-Version prüfen:

php -v

Geladene Extensions anzeigen:

php -m

Verwendete PHP-Konfiguration anzeigen:

php --ini

Weitere Informationen:

PHP


Composer und Laravel

Laravel wird über Composer verwaltet.

Die Laravel-Komponenten und weitere PHP-Abhängigkeiten eines Projekts befinden sich im vendor-Verzeichnis.

Artisan lädt diese Abhängigkeiten über den von Composer erzeugten Autoloader.

Fehlt vendor/, funktionieren Laravel-Befehle deshalb nicht.

In diesem Fall werden die Abhängigkeiten normalerweise wiederhergestellt mit:

composer install

Weitere Informationen:

Laravel


Composer und Git

Bei einem mit Composer verwalteten Anwendungsprojekt werden normalerweise versioniert:

composer.json
composer.lock

Nicht versioniert wird:

vendor/

Damit speichert Git die Definition des Paketstands, aber nicht tausende installierte Fremddateien.

Weitere Informationen:

Git


Praxis: RoWaBase

Im RoWaBase-Projekt befinden sich im Stammverzeichnis:

composer.json
composer.lock

Das Verzeichnis:

vendor/

wird dagegen über .gitignore von der Versionsverwaltung ausgeschlossen.

Damit lässt sich die PHP-Umgebung eines RoWaBase-Projektstands grundsätzlich wiederherstellen:

composer install

Composer liest composer.lock und installiert die dort festgelegten Abhängigkeiten erneut.


Typischer Arbeitsablauf bei einem neuen Paket

composer require hersteller/paket
git status

Danach werden die Änderungen und ihre Auswirkungen geprüft.

Typischerweise haben sich mindestens folgende Dateien geändert:

composer.json
composer.lock

Erst wenn das neue Paket in der Anwendung getestet wurde, sollte der gesamte fachlich zusammengehörige Stand mit Git gesichert werden.


Nützliche Befehle

composer --version
composer install
composer require hersteller/paket
composer require --dev hersteller/paket
composer remove hersteller/paket
composer show
composer outdated
composer dump-autoload
composer validate
composer diagnose

Merksatz

composer.json beschreibt, was das Projekt benötigt.

composer.lock hält fest, welche Versionen tatsächlich zum Projektstand gehören.

vendor/ enthält die daraus installierten Pakete und wird normalerweise nicht mit Git gespeichert.

↑

werkzeuge/composer/start.txt · Zuletzt geändert: (Externe Bearbeitung)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki