Grundlagen: Composer

Man kommt heute als Web-Entwickler kaum noch daran vorbei: Composer. Sobald man fremde PHP Pakete in sein eigenes Projekt einbinden möchte liest man immer wieder von diesem Tool. Man müsste meinen, dass dementsprechend jeder damit umgehen kann aber gerade Neulinge haben immer wieder Probleme mit der Einrichtung des eigenen Projektes. Composer löst ein komplexes Problem auf eine sehr einfache Weise. Es installiert, updated und verbindet fremde PHP Bibliotheken mit dem eigenen Projekt.
Da aber gerade der Einstieg hier immer wieder zu Problemen führt möchte ich an einem einfachen Beispiel die Grundlagen dazu erklären.

Installation:

Die Installation von Composer selbst ist sehr einfach. Für Windows gibt es einen Installer, während es für Mac & Linux einen einfachen Terminal Befehl gibt. Nähere Infos dazu findet man auf: https://getcomposer.org/
Überprüfen kann man die Installation in dem man einfach mal “composer” in der Kommandozeile eingibt und ausführt. Sollte die Installation in Ordnung sein wird jetzt die Version und eine Liste mit allen möglichen Befehlen angezeigt.

Die Benutzung:

Die Grundlagen der Benutzung des Tools zeige ich mit der installation des aktuellen Zend Frameworks.
Für die Verwaltung der externen Bibliotheken benötigt der Composer eine “composer.json” Datei. Darin sind alle Informationen darüber gespeichert welche externen Quellen benötig werden. Natürlich wird auch die Version der Quelle gespeichert. Diese Datei könnte man von Hand anlegen aber einfacher ist es mit dem “composer init” Befehl. Hier wird man an der Hand geführt und kann die Datei erstellen lassen.


pdohmen@thinkpad:~/htdocs/ComposerDemo$ composer init
 Welcome to the Composer config generator
 This command will guide you through creating your composer.json config.
Package name (<vendor>/<name>) [root/composer-demo]: pdohmen/composerdemo
 Description []: Just testing the init process
 Author [Peter Dohmen <mail1@composer.com>, n to skip]:
 Minimum Stability []: stable
 Package Type (e.g. library, project, metapackage, composer-plugin) []: project
 License []: Public
Define your dependencies.
Would you like to define your dependencies (require) interactively [yes]? yes
 Search for a package: ZendFramework
Found 15 packages matching ZendFramework
[0] zendframework/zendframework
 [1] digital-canvas/zend-framework
 [2] webvariants/zend-framework
 [3] magento/zendframework1
 [4] zendframework/zendframework1
 [5] bombayworks/zendframework1
 [6] zwilias/zend-framework-1
 [7] koala-framework/zendframework1
 [8] pixnet/zendframework1
 [9] guilhermeblanco/zendframework1-doctrine2
 [10] zendframework/zendxml
 [11] zendframework/zenddiagnostics
 [12] zendframework/zendpdf
 [13] zendframework/zftool
 [14] mazelab/zendframework1-min
Enter package # to add, or the complete package name if it is not listed: 0
 Enter the version constraint to require (or leave blank to use the latest version):
Using version ^3.0 for zendframework/zendframework
 Search for a package: Would you like to define your dev dependencies (require-dev) interactively [yes]?
 Search for a package:
{
 "name": "pdohmen/composerdemo",
 "description": "Just testing the init process",
 "type": "project",
 "require": {
 "zendframework/zendframework": "^3.0"
 },
 "license": "Public",
 "authors": [
 {
 "name": "Peter Dohmen",
 "email": "xxx@yyy.com"
 }
 ],
 "minimum-stability": "stable"
 }
Do you confirm generation [yes]? yes

Nach diesem Prozess hat der Composer automatisch eine saubere “composer.json” Datei erstellt. In dieser sind nun alle Einstellungen zum eigenen Projekt und dessen externen Abhängigkeiten gespeichert.

Mit dem Befehl “composer install” werden die externen Bibliotheken dann in das aktuelle Verzeichnis installiert. Am Beispiel vom Zend Framework wird dieses in ein Verzeichnis names “vendor” gelegt und von dort muss nur die “autoload.php” im eigenen Projekt eingebunden werden.

War doch einfacher als gedacht! Bei Fragen gerne einen Kommentar hinterlassen.