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"
   },
   "require-dev":{
      "nimut/testing-framework":"^4.0",
      "konafets/typo3_debugbar":"^1.0",
      "sgalinski/lfeditor":"^4.0"
   },
   "autoload-dev":{
      "psr-4":{
         "TYPO3\\CMS\\Core\\Tests\\":"web/typo3/sysext/core/Tests/"
      }
   },
   "extra":{
      "helhum/typo3-console":{
         "install-extension-dummy":"0"
      },
      "typo3/cms":{
         "cms-package-dir":"{$vendor-dir}/typo3/cms",
         "web-dir":"web"
      }
   }
}

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-seo

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. Welche Werte für TYPO3 relevant sind, ist in der TYPO3-Doku beschrieben.

{
  "name": "clickstorm/cs-seo",
  "type": "typo3-cms-extension",
  "description": "[clickstorm] SEO",
  "homepage": "https://www.clickstorm.de",
  "license": [ "GPL-2.0-or-later" ],
  "keywords": [ "typo3", "cms", "clickstorm", "SEO" ],
  "require": {
    "typo3/cms-core": "^10.4"
  },
  "extra": {
    "typo3/cms": {
      "extension-key": "cs_seo"
    }
  },
  "autoload": {
    "psr-4": {
      "Clickstorm\\CsSeo\\": "Classes/"
    }
  },
  "autoload-dev": {
    "psr-4": {
       "Clickstorm\\CsSeo\\Tests\\": "Tests/"
    }
  }
}

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. Der Pfad geht dabei vom Root-Verzeichnis aus, dort wo auch das vendor-Verzeichnis liegt.

{
 ...
 "autoload-dev": {
 "psr-4": {
 "TYPO3\\CMS\\Core\\Tests\\": "web/typo3/sysext/core/Tests/",
 "Vendor\\ExtensionKey\\": "web/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

  • 16/08/2018

    Kommentar von schamja shahaga

    „repositories“: [
    {
    „type“: „path“,
    „url“: „/home/site/ic_mysite“, -> meine lokale Extension gespeichert ist
    „options“: { „symlink“: false }
    },
    ….
    ]
    und
    Minimal ist etwa
    {
    „name“: „ic/ic_mysite“,
    „type“: „typo3-cms-extension“,
    „require“: {
    „typo3/cms“: „^7.6.0“
    },
    „autoload“: {
    „psr-4“: {
    „IC\\ic_mysite\\“: „Classes/“
    }
    }
    }

    Aber es funktioniert leider nicht, Composer lädt mir das Extension ic_mysite nicht.
    Wo mache ich Fehler, ich werde dankbar, wenn Sie helfen können.
    Danke voraus

    • 16/08/2018

      Kommentar von Marc

      Hallo,

      deine Extension muss unter typo3conf/ext liegen, damit sie im Extension-Manager aufgelistet ist.

      Viele Grüße,
      Marc

  • 04/10/2018

    Kommentar von Richy

    Hallo ,
    ich kann im Moment noch keinen Vorteil von Composer sehen ,
    wenn ich eine belibige Zip Datei auf dem Server ablege und diese dort entpacke bin ich schnell genug um dann dort vorort eine Grundeinrichtung zu machen
    oder liege ich hier falsch

    WIe lade ich zum Beispiel WordPress über den Composer hoch ?

    • 08/10/2018

      Kommentar von Marc

      Hallo Richy, ich kann es dir leider nur aus TYPO3-Sicht beantworten. Composer dient für uns einfach dazu, schnell ein System aufsetzen zu können unter Berücksichtigung aller Abhängigkeiten. Auch Patches lassen sich so leicht einspielen. Zum Thema WordPress und Composer gibt es bei Google einige interessante Ansätze. Viele Grüße, Marc

  • 13/02/2019

    Kommentar von Nodens

    Wer pro Tag mehrere gleichartige TYPO3 Installation braucht, für den ist Composer sicher unverzichter. Aber sonst?

    • 18/02/2019

      Kommentar von Marc

      Hallo Nodens, danke für deinen Kommentar. Sicherlich war es für uns auch erstmal eine umgewöhnung, aber mittlerweile nutzen wir es überall. Die Abhängigkeiten sind gut erkennbar. Tests und weitere PHP-Pakete lassen sich leicht integrieren. Auch für das Deployment nutzen wir es. Patches lassen sich leicht aufsetzen. Wir konnten noch keine Nachteile erkennen, daher kann ich es dir nur empfehlen. Der Lernaufwand ist auch ziemlich gering. Viele Grüße, Marc

  • 13/02/2019

    Kommentar von Julian

    Hallo Marc,

    wie gehe ich vor wenn ich TYPO3 schon ohne Composer laufen habe und Composer nachträglich aktivieren will. Damit ich dann jegliche Updates via Composer durchführen kann?

    VG Julian

    • 18/02/2019

      Kommentar von Marc

      Hallo Julian, ich weiß jetzt nicht ob das der offizielle Weg ist, aber wir haben immer zuerst die composer.json geschrieben (anhand der bestehenden Extensions inkl. Versionen), dann alles gesichert, die Ordner typo3/ und typo3conf/ext gelöscht, ebenso wie die index.php. Dann solltest du ein composer install durchführen können. Das war es dann eigentlich auch schon. Wenn es bei dir hakt, gib einfach nochmal Bescheid. Viele Grüße, Marc

  • 22/03/2023

    Kommentar von Frank Hilling

    Hallo Marc,

    ist es grundsätzlich möglich in einer klassischen Typo3-Installation (ohne Composer) einzelne Extensions über Composer zu installieren?
    Oder muss Typo3 dann auch zwingend mit Composer aufgesetzt werden?

    • 22/03/2023

      Kommentar von Marc

      Hallo Frank,

      danke für deine Frage. So eine Hybrid-Lösung ist mir nicht bekannt. Ich würde dir emfpehlen, wenn möglich auf Composer umzusteigen. Der Einarbeitungs-Aufwand ist sehr überschaubar und die Vorteile überwiegen.

      Viele Grüße,
      Marc

Kommentar hinzufügen

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