Composer ist ein Werkzeug um Abhängigkeiten in PHP verwalten zu können (Dependency Management). Damit ist es möglich, PHP-Bibliotheken anzugeben, die von unserem Projekt verwendet wird. Composer kümmert sich dann darum, dass die Bibliothek mit allen weiteren (transitiven) Abhängigkeiten installiert und aktualisiert wird, falls erforderlich. Vergleichbar ist es mit npm für JavaScript, Maven für Java (zumindest der Dependency-Anteil) oder nuget für .net.
Composer installieren und einrichten
Wie Composer für die PHP-Entwicklung und die Verwendung in IntelliJ eingerichtet wird, habe ich im Artikel Entwicklungsumgebung für PHP unter Windows einrichten beschrieben.
Composer manuell verwenden
Da ich IntelliJ für die PHP-Entwicklung verwende, beschreibe ich hier auch nur, wie Composer in IntelliJ 14.x verwendet wird. Composer kann auch über die Kommandozeile aufgerufen werden. Wie das funktioniert, ist auf der Composer-Homepage beschrieben.
Composer in IntelliJ für das Projekt einrichten
Wenn wir eine neue Bibliothek hinzufügen möchten, die wir in unserem Projekt verwenden wollen, ist dies ganz einfach möglich.
Haben wir bislang noch keine Abhängigkeit in unserem Projekt, müssen wir Composer zunächst initialisieren. Dazu rufen wir im Project-Toolwindow auf dem Projekt das Kontextmenü auf und wählen Composer -> Init Composer…
Im folgenden Dialog wählen wir die PHP-Installation aus, die wir für unser Projekt verwenden möchten und geben den Pfad zur phar-Datei von Composer an.
Daraufhin erstellt IntelliJ uns eine Datei namens composer.json und öffnet sie direkt zur Bearbeitung. In dieser Datei werden alle Abhängigkeiten verwaltet (ähnlich der pom.xml bei Maven).
Wir geben hier den Namen unseres Projekts und eine Beschreibung an. Zusätzlich kann noch eine Lizenz gewählt und die Autoren angegeben werden. Das ist insbesondere dann wichtig, wenn wir unser Projekt selbst wieder für die Verwendung mit Composer veröffentlichen wollen.
Nun können wir Composer verwenden.
Composer in IntelliJ verwenden
Um eine Abhängigkeit zu unserem Projekt hinzuzufügen rufen wir erneut das Kontextmenü auf dem Projekt auf und wählen Composer -> Add Dependency…
Es öffnet sich ein Dialog, in dem wir nach allen zur Verfügung stehenden Bibliotheken suchen können. Haben wir die gewünschte Bibliothek gefunden, können wir noch die Version auswählen.
Wichtig: Es wird hier immer die aktuelle Version vorbelegt. Das kann unter Umständen eine Development-Version sein, was sich für produktive Projekte nicht immer anbietet. Hier also eine entsprechende stable-Version wählen.
Nach einem Klick auf den Button Install wird die Bibliothek installiert.
Hinweis: Bei mir dauert die Installation mitunter sehr lange (mehrere Minuten). Falls es also anscheinend ewig dauert, habt ein wenig Geduld, das wird schon…
Voraussetzungen von Bibliotheken
Composer sorgt dafür, dass transitive Abhängigkeiten der Bibliotheken aufgelöst werden. Nehmen wir mal als Beispiel phpunit:
Die Bibliothek benötigt als Abhängigkeit symfony/yaml. Composer sorgt dafür, dass diese ebenfalls heruntergeladen und in unserem Projekt installiert wird.
Zusätzlich prüft Composer aber auch weitere Abhängigkeiten, die es nicht durch herunterladen weiterer Bibliotheken lösen kann. Da müssen wir selbst Hand anlegen. Folgende Fälle können auftreten:
- Vorausgesetzte PHP-Version passt nicht zu unserem Projekt
phpunit in der Version 4.7.6 benötigt z.B. PHP in einer Version >=5.3.3. Nutzen wir in unserem Projekt z.B. PHP 5.2 kommt es zu einer entsprechenden Fehlermeldung - PHP-Erweiterungen sind nicht aktiviert
Damit wir phpunit verwenden können brauchen wir zusätzlich einige aktive Extensions. Etwa ext-dom oder ext-json. Ist eine dieser Erweiterungen nicht im enthalten oder in unserer php.ini-Datei aktiv, müssen wir diese erst aktivieren, bevor wir die Bibliothek installieren können. Auch hier zeigt IntelliJ eine entsprechenden Fehlermeldung an.
Struktur von Bibliotheken
Nachdem Composer die Bibliothek installiert hat, haben wir in unserem Projekt folgende neue Elemente:
- Den Ordner vendor
- bin
Hier werden direkt aufrufbare Tools abgelegt, falls die Bibliothek für die Entwicklung gedacht ist. Hier liegt z.B. eine Batch-Datei für phpunit. - [Name der Bibliothek]
Hier werden die Bibliotheken abgelegt, die wir installiert haben,sowie alle transitiv abhängigen Bibliotheken.
- bin
- Die Datei composer.lock
Hier werden die konkreten Versionen der von unserem Projekt verwendeten Bibliotheken und deren Abhängigkeiten festgeschrieben. Dadurch ist sichergestellt, dass wir eine wiederherstellbare Umgebung aus dem Source-Code aufbauen können.
Verwendung von Versionskontrollsystemen
Wird ein VCS verwendet (etwa SVN oder Git), so müssen nur die folgenden Dateien eingecheckt werden:
- composer.json
- composer.lock
Alle anderen Dateien, also die Bibliotheken, werden durch den Aufruf von composer install lokal installiert. IntelliJ kümmert sich sogar vollautomatisch darum.
Auf diesem Weg kann man sehr schnell und einfach neue Bibliotheken zu einem Projekt hinzufügen. Da Composer auch noch einen eigenen AutoLoader mitbringt, ist die Verwendung ein Kinderspiel.