TYPO3 Extension und Composer-Packages ohne Composer

Ich bin schon verwöhnt, seit ich Composer nutze. Da gibt es dann andere Problemchen, aber zumindest braucht man sich keine Gedanken um Abhängigkeiten zu machen. Extension per Composer installieren, notwendige Pakete werden geladen – fertig! Gelegentlich kommt es vor, dass auf einem Kunden-Server Composer nicht installiert werden darf oder der Kunde es nicht wünscht. Ich knirsche dann ein bisschen mit den Zähnen und arbeite so wie früher – „classic way“, wie es auf get.typo3.org so schön heißt.

Aktuell habe ich genau so einen Fall. Ich habe eine Extension installiert, die folgende Pakete benötigt:

"geocoder-php/google-maps-provider": "^4.4",
"php-http/guzzle6-adapter": "^1.0",
"php-http/message": "^1.7",
"geocoder-php/nominatim-provider": "^5.1"

Zunächst habe ich angefangen, mit alle Pakete aus den jeweiligen Git-Repos herunterzuladen, die dann wiederum andere Pakete brauchten etc. So hangelte ich mich von Paket zu Paket. Die Dateien der Pakete müssten natürlich nicht nur da sein, sondern auch eingebunden werden. Am Anfang hatte ich jede Datei einzeln mit require eingebunden – da wird man ja bekloppt! Es wurde mir composer-file-loader empfohlen. Es löst zwar das Problem, dass man die Dateien nicht alle einzeln aufführen muss, aber ein Paket benötigt das andere und sich an den Abhängigkeiten entlanghangeln muss man ja selbst.

Etwas später in einer ruhigen Minute hatte ich die Idee: Ich kann auf dem Server kein Composer nutzen, aber ich kann LOKAL Composer nutzen, um mir die notwendigen Pakete zu laden.

Ich habe eine TYPO3 Extension erstellt, die nur aus ext_localconf.php, ext_emconf.php und composer.json besteht. In die composer.json habe ich die benötigten Pakete aufgelistet:

{
    "name": "myvendor/myextension",
    "type": "typo3-cms-extension",
    "description": "Externe Pakete, da sie nicht per Composer installiert werden können",
    "license": "GPL-2.0+",
    "require": {
        "geocoder-php/google-maps-provider": "^4.4",
        "php-http/guzzle6-adapter": "^1.0",
        "php-http/message": "^1.7",
        "geocoder-php/nominatim-provider": "^5.1"
    },
    "config": {
        "vendor-dir": "vendor"
    }
}

Dann auf der Konsole in dem Extension-Ordner composer install laufen lassen. Nicht nur, dass mir composer alle Pakete mit den Abhängigkeiten lädt, er erstellt auch eine autoload.php, die ich einbinden kann. Somit steht in meiner ext_localconf.php nur noch das:

require_once(\TYPO3\CMS\Core\Utility\GeneralUtility::getFileAbsFileName('EXT:myextension/vendor/autoload.php'));

Da merkt man doch wieder, wie schön Arbeiten mit Composer ist…

1 Kommentar

  1. Danke für deinen Beitrag.

    Noch ein Tipp: Sofern die Firewall nicht das Problem ist, sollte man eine composer.phar auch auf günstigeren Webhostingpaketen manuell herunterladen und irgendwo ablegen können. Dann lässt sich Composer auch dort bedienen.

    VG, Alex