Schreibtisch von einem Musikkomponisten

Composer zur Installation / Verwaltung von TYPO3 verwenden

Der PHP-Paketmanager Composer lässt sich seit geraumer Zeit auch für TYPO3 verwenden. Dabei ist das Zusammenwirken noch nicht vollständig ausgereift. Einige Vorteile lassen sich jedoch bereits heute schon nutzen. Wir geben Ihnen einen Einstieg in die Software und verraten einige Tipps, welche wir als Team der clickstorm GmbH aus der eigenen Erfahrung heraus zusammengetragen haben.

Was ist Composer?

Composer ist ein Paketmanager und dient der Verwaltung von externen Bibliotheken und deren Abhängigkeiten. Er wird über das Command Line Interface (CLI) gesteuert.

Kommandozeile mit dem Befehl composer help

Im Zusammenhang mit TYPO3 dient die Software dazu, um Extensions zu installieren und Versionen zu verwalten. Das Einrichten einer neuen TYPO3-Installation inkl. aller benötigten Erweiterungen wird mit Composer extrem beschleunigt. Auch das automatische Laden von Klassen wird über Composer gesteuert.

Composer installieren

Eine allgemeine Anleitung für verschiedene Betriebssysteme finden Sie in der offiziellen Dokumentation zu Composer. Wir betrachten im Folgenden die Installation für Windows und Ubuntu genauer.

Installation unter Windows

Um Composer auf einem Windows-PC zu installieren, kann die aktuelle Version als composer-setup.exe von getcomposer.org heruntergeladen werden. Da es sich um eine PHP-Software handelt, muss PHP ebenfalls installiert sein. Hierfür bietet sich XAMPP an. Nach der Installation kann Composer in der Kommandozeile verwendet werden. Sie kann über das Kontextmenü (Rechtsklick) in jedem beliebigen Ordner gestartet werden. Hierzu ist der Befehl zu wählen Use Composer here.

Composer im Windows-Kontextmenü

Installation auf Ubuntu

Für den Ubuntu kann gleich die Kommandozeile genutzt werden. Folgende Befehle sind für die Installation notwendig. Zuerst wird die Liste der verfügbaren Pakete aktualisiert. Dann werden notwendige Abhängigkeiten installiert (Curl, PHP-CLI, Git). Schließlich wird composer eingerichtet.

sudo apt-get update
sudo apt-get install curl php-cli git
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer

TYPO3 mit Composer installieren

Um nun ein neues TYPO3 aufzusetzen wird lediglich eine Datei mit dem Namen composer.json benötigt. Hier werden neben dem TYPO3 CMS alle benötigten Extensions festgelegt. Somit ist es möglich Standard-Extensions, wie beispielsweise RealURL oder cs_seo, immer direkt mit herunterzuladen. Zusätzlich kann für jedes Paket eine Version festgelegt werden.

Eine Liste aller möglichen Erweiterung finden Sie hier. Prinzipiell sind alle Erweiterungen, welche im Extension Repository verfügbar sind, auch via Composer verfügbar.

{
 "repositories": [
 {
 "type": "composer",
 "url": "https://composer.typo3.org/"
 }
 ],
 "require": {
 "typo3/cms": "~7.6",
 "clickstorm/cs_seo": "*",
 "clickstorm/go_maps_ext": "~2",
 "clickstorm/cs_cdn": "*",
 "clickstorm/cs_youtube_data": "*",
 "gridelementsteam/gridelements": "~7",
 "typo3-ter/extension-builder": "~7.6",
 "typo3-ter/gravatar": "*",
 "typo3-ter/lfeditor": "*",
 "typo3-ter/my-redirects": "~3",
 "typo3-ter/min": "~1",
 "typo3-ter/news": "~5",
 "typo3-ter/powermail": "~3",
 "typo3-ter/realurl": "~2",
 "typo3-ter/vhs": "~3"
 },
 "autoload-dev": {
 "psr-4": {
 "TYPO3\\CMS\\Core\\Tests\\": "typo3/sysext/core/Tests/"
 }
 }
}

Zuerst wird die Liste der verfügbaren TYPO3-Pakete Composer mitgeteilt. Dann werden TYPO3 und die Erweiterungen beschrieben. Am Ende werden noch weitere Klassen für den Autoloader hinzugefügt.

Die Datei wird in einem leeren Ordner gelegt. Die Kommandozeile ist in diesem Ordner mit dem Befehl install auszuführen. Das Argument -v sorgt dafür, dass der Fortschritt detaillierter aufgezeigt wird.

composer install -v

Einzelne Pakete aktualisieren

Um anschließend einzelne Pakete zu aktualisieren, muss lediglich der update-Befehl zusammen mit dem Paketnamen aufgerufen werden. Mehrere Pakete können gleichzeitig aktualisiert werden. Dafür muss sich lediglich ein Leerzeichen zwischen den Namen befinden. Im folgenden Beispiel wird der TYPO3-Kern und die Erweiterung cs_youtube_data aktualisiert.

composer update typo3/cms clickstorm/cs_youtube_data

Werden keine Paketnamen angegeben, werden alle Pakete aktualisiert, insofern es eine neue Version gibt oder die Version nicht beschränkt wurde. Es ist generell zu vermeiden, alle Pakete zu aktualisieren, außer es ist explizit gewünscht. Ansonsten sind mögliche Fehlerquellen aufgrund von Aktualisierungen schwieriger zu ermitteln.

Weitere Repositories hinzufügen

Die Standard composer.json kann um eigene Repositories erweitert werden. Zusätzlich können weitere Pakete von beispielsweise packgist.org oder auch eigene Git-Repositories bezogen werden.

{
 "repositories": [
 {
 "type": "vcs",
 "url": "https://github.com/username/repo"
 },
 ],
 "require": {
 "vendor/repo": "dev-master",
 },
}

Extensions mit einer composer.json ausstatten

Damit Erweiterungen in Repositories über Composer geladen werden können, ist neben der ext_emconf.php eine composer.json zu hinterlegen, welche das Paket beschreibt. Alle möglichen Werte der copmoser.json finden Sie in der Dokumentation.

{
 "name": "clickstorm/cs_seo",
 "type": "typo3-cms-extension",
 "description": "[clickstorm] SEO",
 "homepage": "http://www.clickstorm.de",
 "license": [
 "GPL-2.0+"
 ],
 "keywords": [
 "typo3",
 "cms",
 "clickstorm",
 "SEO"
 ],
 "version": "2.0.0-dev",
 "replace": {
 "cs_seo": "*"
 },
 "require": {
 "typo3/cms-core": ">=7.6.0"
 },
 "suggest": {
 "typo3-ter/realurl": "*"
 },
 "autoload": {
 "psr-4": {
 "Clickstorm\\CsSeo\\": "Classes/"
 }
 }
}

Tipps für Composer und TYPO3

Aus der eigenen Erfahrung heraus, führen wir hier Tipps und Tricks auf, welche wir selber im Alltag nutzen.

Composer beschleunigen

Um Composer zu beschleunigen sollte XDebug deaktiviert sein. Zusätzlich kann Global das Paket Presstissimo installiert werden. Es ermöglicht das gleichzeitige Laden von mehreren Paketen.

composer global require "hirak/prestissimo:^0.3"

Composer aktualisieren

Es sollte darauf geachtet werden, dass Composer selbst von Zeit zu Zeit aktualisiert wird, u.a. zur Verbesserung der Performance oder zur Fehlerbehebung. Das Update ist relativ simpel. Es muss lediglich der folgende Befehl in der Kommandozeile ausgeführt werden.

composer self-update

Damit die Aktualisierung regelmäßig ausgeführt wird, könnte eine Bash-Datei mit dem Befehl erstellt werden und ein Cronjob welcher z. B. einmal im Monat die Datei ausführt.

Umgang mit älteren Extensions

Bei älteren TYPO3-Extension kann es sein, dass Abhängigkeiten für eine neuere PHP-Version noch nicht aktualisiert wurden, aber die Erweiterung eigentlich schon auf der neueren Variante der Plattform läuft. Mit dem Argument –ignore-platform-reqs werden Plattform-Versionen ignoriert.

composer update vendor/repo --ignore-platform-reqs

Unit-Testing mit Composer

Um Unit-Tests in TYPO3 7.6 durchführen zu können, müssen die benötigten Klassen aus dem Core dem Autoloader hinzugefügt werden. Wie das geht, wird im folgenden Abschnitt erläutert.

Klassen zum Autoload hinzufügen

Für Erweiterungen, welche nicht einer Versionsverwaltung unterliegen, müssen die Klassen der composer.json bekannt gemacht werden. Nur so werden sie dem Autoloader hinzugefügt.

{
 ...
 "autoload-dev": {
 "psr-4": {
 "TYPO3\\CMS\\Core\\Tests\\": "typo3/sysext/core/Tests/",
 "Vendor\\ExtensionKey\\": "typo3conf/ext/extension_key/Classes/"
 }
 }
}

Um den Autoloader zu aktualisieren, muss der folgende Befehl ausgeführt werden. Das zusätzliche Argument sorgt gleichzeit für die Optimierung. Die jeweiligen Klassen werden schneller geladen.

composer dump-autoload -o

Ausblick

Wir verwenden Composer nun schon seit einiger Zeit auch im Zusammenhang mit TYPO3. Neue Projekte lassen sich schnell aufsetzen. Wünschenswert wäre es noch, dass zukünftig der Extension Manager mehr mit dem PHP-Paketemanager interagiert. Zudem sorgt die Doppelung von composer.json und der ext_emconf.php für ein redundantes Arbeiten.

Haben Sie selbst bereits Erfahrungen mit Composer gemacht oder weitere Anregungen zum Artikel? Wir freuen uns sehr über Feedback in den Kommentaren. Falls Sie Fragen zum Thema haben, können Sie uns gerne kontaktieren.

  • 18/01/2017

    Kommentar von Max Mustermann

    „Für Erweiterungen, welche nicht einer Versionsverwaltung unterliegen, müssen die Klassen der composer.json bekannt gemacht werden. Nur so werden sie dem Autoloader hinzugefügt.“
    Könnt ihr das ein bisschen erläutern? Composer hat mit Versionsverwaltung so wie dargestellt nichts zu tun. Meint ihr eine fehlende composer.json-Datei von Extensions?

    • 19/01/2017

      Kommentar von Marc

      Hallo, vielen Dank für die Frage. Hier ist gemeint, wenn die Pakete / Extensions nur lokal vorliegen und nicht in einem Repository. Bei lokalen Erweiterungen müssen die Klassen dem Autoloader hinzugefügt werden. Wenn es andere Wege dafür gibt, sind wir für Hinweise sehr dankbar. Viele Grüße, Marc

  • 05/12/2017

    Kommentar von Patrick Schriner

    Hallo Marc, folgendes funktioniert:

    „repositories“: [
    {
    „type“: „path“,
    „url“: „/var/www/composer/blubblub“,
    „options“: { „symlink“: false }
    },
    ]

    „require“: {
    „nanana/blubblub“: „@dev“
    }

    Wenn in blubblub zumindest eine Minimal composer.json ist.

    Minimal ist etwa

    {
    „name“: „nanana/blubblub“,
    „type“: „typo3-cms-extension“,
    „require“: {
    „typo3/cms“: „^8.7.0“
    },
    „autoload“: {
    „psr-4“: {
    „Nanana\\Blubblub\\“: „Classes/“
    }
    }
    }

    • 05/12/2017

      Kommentar von Marc

      Hallo Patrick, danke für deine Anmerkung. Das sieht soweit gut aus. Viele Grüße, Marc

Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.