Bereits einfache Web-Applikationen haben einen hohen Grad an Komplexität. Nehmen Sie als Beispiel unsere Website. Folgende Komponenten setzen wir ein:
- Yii-PHP-Framework: Backend, Logik, MVC, RBAC, DAL, etc.
- jQuery: JavaScript-Framework für AJAX, DOM-Manipulationen, etc.
- jQuery UI: Widget-Toolkit für Frontend
- Twitter Bootstrap: Umfassendes JavaScript- / CSS-Framework zur Frontend-Gestaltung
- Font-Awesome: Symbol-Schriftsatz zur vektorbasierten Icon-Darstellung
- REST-WebService-API: Eigene Yii-Extension für Zugriff mit Mobile-Apps
Dies ist bereits eine beachtliche Liste, wenn man bedenkt, dass es sich nur um eine Website mit einfacher Blog-Funktion handelt. Wenn wir nun die Abhängigkeiten dazugeben, erkennen Sie das gesamte Ausmass der Problematik:
Als Entwickler hat man nun die Aufgabe - nebst dem Entwickeln der eigentlichen Applikation - Abhängigkeiten und Versionen der eingesetzten Fremdkomponenten zu verfolgen. Das Updaten einer Komponente führt meist zu Inkompatibilitäten anderer Applikationsteile. Eigentlich schon längst überfällig, gibt es nun ein Werkzeug, welches uns beim Managen der Komponenten-Abhängigkeiten unter die Arme greift. In den folgenden Abschnitten lernen Sie was Composer ist und wie Sie mit dem Produkt arbeiten.
Kapitelübersicht
1.Installation
Bevor Sie loslegen können, müssen Sie Composer in Ihrem Projekt installieren. Die hier beschriebene Installation ist für Windows-Systeme. Die Anleitung für sämtliche Systeme finden Sie auf der offiziellen Website.
Windows-Installation
Die einfachste Art der Installation ist der Download des
Installers.
Dieser findet automatisch den
Installationspfad Ihrer php.exe
und richtet die Einträge in Ihrer PATH-Variable
ein.
Im Anschluss können Sie Composer überall in Ihrer Windows-Konsole über den composer
-Befehl aufrufen.
Wenn alles geklappt hat, erhalten Sie dabei folgende Ausgabe:
2.Was genau macht Composer?
Composer verwaltet zwar Pakete oder Libraries, ist aber kein Package-Manager im klassischen Sinne. Composer verwaltet Pakete auf Projektebene. Die offizielle Website beschreibt die Kernaufgaben folgendermassen:
- Sie haben ein Projekt, welches externe Libraries einsetzt
- Einige dieser Libraries hängen selber von weiteren Libraries ab
- Sie deklarieren, welche Libraries Sie effektiv benötigen
- Composer löst dann selbständig alle Abhängigkeiten und Versionen auf und lädt diese selbstständig in Ihr Projektverzeichnis.
Damit dies funktioniert, müssen Sie innerhalb des Projekt-Hauptordners eine Composer-Konfigurationsdatei anlegen.
Der Dateiname lautet typischerweise composer.json
und enthält ein
JSON-Objekt, welches die Projekteigenschaften
und -abhängigkeiten beschreibt. Die nachfolgende Datei beschreibt ein einfaches Yii-Projekt:
Damit Yii in der gewünschten Version läuft, setzen wir die entsprechende PHP-Version voraus (mindestens 5.3.2) und fordern die aktuellste Yii-1.1-Subversion an (1.1.*). Voilà!
3.Testprojekt
Um die korrekte Funktionsweise zu testen, können Sie im Web-Ordner htdocs
Ihres Web-Servers ein neues Verzeichnis
anlegen und die oben beschriebene composer.json
-Datei einfügen. Nun starten Sie die Windows-Konsole und wechseln in
das selbe Verzeichnis. Mit der Anweisung composer install
starten Sie den Projekt-Installationsprozess:
Nachdem Composer mit den Arbeiten fertig ist, finden Sie im Verzeichnis folgende Dateien und Ordner:
-
composer.json
die Konfigurationsdatei in unveränderter Form
-
composer.lock
enthält die Versionen der aktuell installierten Komponenten. Wird also die obige Konfigurationsdatei verändert, so weiss Composer welche Komponenten aktualisiert werden müssen
-
Ordner
vendor
enthält die angeforderten und nun heruntergeladenen Libraries
Sie haben vielleicht festgestellt, dass sich im Ordner vendor
eine PHP-Klasse mit dem Namen
autoload.php
befindet. Diese hat Composer für uns erstellt, dass wir uns nicht mehr um den Import
der einzelnen PHP-Klassen der heruntergeladenen Libraries kümmern müssen. Wenn Sie nun im Projektverzeichnis eine
neue PHP-Datei erstellen und eine Library-Klasse verwenden möchten, so brauchen Sie diese nicht mittels
require_once()
einzubinden. Einzig die vendor/autoload.php
-Datei müssen Sie am Anfang
der Datei einbinden und können im Anschluss Instanzen sämtlicher Klassen erstellen. Wow!
4.Das Paket-Verzeichnis
Woher kriege ich Pakete?
In der Konfigurationsdatei werden die angeforderten Pakete festgelegt. Doch woher sollen Sie wissen, welche Pakete überhaupt über Composer installiert werden können? Für diesen Zweck gibt es die Webseite Packagist. Sie können ganz einfach nach dem Namen der benötigten Library suchen und erhalten sämtliche verfügbaren Versionen und Einstellungen zur Verwendung mit der Konfigurationsdatei.
Um beispielsweise die aktuellste, stabile Version 3 von Twitter Bootstrap einzubinden, müssen Sie Ihre
Konfigurationsdatei mit der Zeile "twitter/bootstrap": "v3.*"
ergänzen. Wenn Sie ganz auf dem Stand der Zeit sein
möchten und auch mit in Entwicklung stehenden Versionen leben können, müssen Sie @dev
anhängen:
"twitter/bootstrap": "v3.*"@dev
.
Und umgekehrt?
Ja, es geht auch umgekehrt. Ihre eigenen Projekte können Sie ebenfalls zum Download anbieten. Sie müssen dazu
einzig die composer.json
-Datei ergänzen. Damit andere Benutzer Ihr Paket finden können, braucht es
noch einen Namen. Zusätzlich müssen Sie definieren, wo sich der Inhalt Ihres Pakets, bzw. Ihr Repository im
Internet befindet. Wenn Sie das Beispiel aus Abschnitt 3 mit den nötigen Angaben ergänzen, erhalten Sie
folgende Konfigurationsdatei:
Andere Benutzer können nun das von Ihnen erstellte Paket ganz einfach mit Composer herunterladen. Da auch Sie die Abhängigkeiten Ihres Projekts definiert haben, schliesst sich der Kreis wieder. Eine saubere Sache!
Schreibweise
Die Details zur Versionsschreibweise und den Paketnamen finden Sie auf der offiziellen Website.
5.Composer in Kombination mit Version-Control
In Kombination mit einem Versions-Kontrollsystem wird ein weiterer Vorteil sichtbar. Normalerweise wird ein Projekt
als Ganzes im System eingecheckt. Mit Composer brauchen Sie nun keine Libraries einzuchecken, da ein Programmierer
nach dem auschecken ganz einfach über die composer install
-Anweisung die Libraries herunterladen kann.
Durch die composer.lock
-Datei wird zudem garantiert, dass jeder Programmierer dieselbe Version der Libraries hat.
Sie sparen viel Platz im Versions-Kontrollsystem, welcher sonst durch das x-fache hochladen der selben Libraries
und Frameworks verschwendet würde.
Was muss wirklich eingecheckt werden?
Diese Frage kann ganz einfach beantwortet werden: Ausschliesslich Dateien, welche Sie programmieren. Die restlichen Dateien und Ordner können ignoriert und von jedem Benutzer individuell heruntergeladen werden.
Umsetzung mit Git-Version-Control
Git sucht in jedem Verzeichnis nach einer Datei mit dem Namen .gitignore
. Eine solche Datei können Sie im Verzeichnis
vendor
anlegen und darin den nachfolgenden Code speichern:
Damit sagen Sie Git, dass es alles innerhalb des Ordners, ausser der .gitignore-Datei
nicht versionieren und somit
hochladen soll. Ihre Repositories werden so nicht mehr aufgebläht und belasten den Speed Ihres Servers nicht.
6.Schlussfolgerung
Ich bin verhältnismässig spät in den Kontakt mit Composer gekommen. Umso mehr schätze ich mittlerweile das Werkzeug.
Es minimiert Fehlerquellen, spart Platz, konzentriert die Versions- und Abhängigkeitsverwaltung in der
Datei composer.json
und erlaubt es, den Code auf einfachste Art und Weise wiederzuverwenden.
Obwohl unabhängig davon entwickelt, verbessert Composer die Sprache PHP (und andere Skriptsprachen) erheblich, da es einem der grössten Negativargumenten dieser Sprache den Wind aus den Segeln nimmt. Das Tool ist einfach in der Bedienung und der eingesparte Zeitaufwand ist beträchtlich.
Was halten Sie von Composer? Schreiben Sie uns Ihre Meinung in einem Kommentar. Wir sind gespannt.