TYPO3-Projekte mit composer aufsetzen

Ich weiß nicht, ob es eine ultimative Art gibt, TYPO3-Projekte, in denen man selber Erweiterungen entwickelt, mittels composer aufzusetzen. Von daher beschreibe ich mal mein Setup und bin gespannt, wie man es besser machen könnte.

Allgemein gehe ich davon aus, dass eine Website auf Basis von TYPO3 entwickelt werden soll. Sprich: es wird TYPO3 CMS als Core-System verwendet, ein paar Extensions aus dem TER und dann noch ein paar Erweiterungen, die man selber entwickelt und die nicht öffentlich im TER verfügbar sind. Template-Erweiterungen und so weiter.

Für die Website gibt es dann ein Repository, in dem sich bei mir zwei composer.json-Dateien befinden, da ich Projekte momentan mittels TYPO3 Surf auf ein Test- und Livesystem deploye. Eine Datei heißt composer.json und ist für den Aufbau des Test- und Livesystems verantwortlich. Die andere Datei heißt composer-dev.json und verwaltet alle Abhängigkeiten für mein Entwicklungssystem. Warum ich nicht in der composer-Datei den "require-dev"-Zweig nutze, wird gleich klar.

{
  "repositories": [
    {
      "type": "composer",
      "url": "https://composer.typo3.org/"
    },
    {
      "type": "path",
      "url": "../_Extensions/*"
    }
  ],
  "name": "my-vendor/my-typo3-cms-distribution",
  "require": {
    "typo3/cms": "^8.7",
    "helhum/typo3-console": "^4.6",
    "vendor/my_extension": "^1.0"
  },
  "scripts": {
    "package-states": [
      "./vendor/bin/typo3cms install:generatepackagestates --activate-default"
    ],
    "folder-structure": [
      "./vendor/bin/typo3cms install:fixfolderstructure"
    ],
    "post-autoload-dump": [
      "@package-states",
      "@folder-structure"
    ]
  },
  "extra": {
    "helhum/typo3-console": {
      "install-extension-dummy": false
    },
    "typo3/cms": {
      "cms-package-dir": "{$vendor-dir}/typo3/cms",
      "web-dir": "web"
    }
  }
}

Im repositories-Zweig verweise ich auf den Ordner _Extensions, der sich auf gleicher Ebene wie das Projekt-Repository befindet. Hier kann natürlich auch auf ein projektbezogenen Unterverzeichnis verwiesen werden (mache ich auch so, habe es nur vereinfacht). In diesem _Extensions-Verzeichnis befinden sich die Repositories der Erweiterungen für dieses Projekt, die ich selber entwickele. In diesem Fall die Erweiterung my_extension. Diese Erweiterung besitzt natürlich auch eine entsprechend gepflegte composer.json-Datei um unter anderem das Autoloading zu gewährleisten, Abhängigkeiten aufzulösen und notfalls Umbenennungen vorzunehmen.

Mittels

COMPOSER=composer-dev.json composer update

wird das Entwicklungssystem aufgesetzt. TYPO3 Console übernimmt hierbei auch das Erstellen der PackageStates.php und erstellt notwendige Verzeichnisse. Meine Erweiterungen werden per Symlink in die jeweiligen Repository-Verzeichnisse aufgelöst. Erweiterungen aus dem TER werden wie gewohnt "normal" unterhalb von web/typo3conf/ext/ kopiert.

Nun kann ich in den jeweiligen Erweiterungs-Repositories entwickeln, versionieren, taggen und so weiter. Wenn ich einen Stand erreicht habe, der getestet oder sogar veröffentlicht werden soll, werden meine Erweiterungen beziehungsweise die Symlinks (per Bash-Skript) entfernt und folgende Composer-Datei aufgerufen:

{
  "repositories": [
    {
      "type": "composer",
      "url": "https://composer.typo3.org/"
    },
    {
      "type": "vcs",
      "url": "https://github.com/KaffDaddy/my_extension"
    }
  ],
  "name": "my-vendor/my-typo3-cms-distribution",
  "require": {
    "typo3/cms": "^8.7",
    "helhum/typo3-console": "^4.6",
    "vendor/my_extension": "^1.0"
  },
  "scripts": {
    "package-states": [
      "./vendor/bin/typo3cms install:generatepackagestates --activate-default"
    ],
    "folder-structure": [
      "./vendor/bin/typo3cms install:fixfolderstructure"
    ],
    "post-autoload-dump": [
      "@package-states",
      "@folder-structure"
    ]
  },
  "extra": {
    "helhum/typo3-console": {
      "install-extension-dummy": false
    },
    "typo3/cms": {
      "cms-package-dir": "{$vendor-dir}/typo3/cms",
      "web-dir": "web"
    }
  }
}

Wie man sieht, ist der einzige Unterschied im repositories-Zweig zu sehen. Hier müssen entsprechend alle Repositories der Erweiterungen angegeben werden, die installiert werden sollen. In diesem Fall ist es nur eine, aber das kann dann schon mal ausarten. Wenn man nun composer update ausführt, werden die Erweiterungen alle "normal" installiert.

Kommentare

Keine Kommentare

Kommentar schreiben

* Diese Felder sind erforderlich