Composer in Drupal 8.8.0 – erste Eindrücke

31.10.2019 Pablo Lopez Escobes
Drupal

Die neue Drupal-Version 8.8.0 hält viele Änderungen und Verbesserungen für die Community bereit.
Die aus Entwicklersicht wohl interessanteste ist die volle Unterstützung durch Composer beim Aufbau von Drupal-Projekten.

Dank der „Composer Support in Core Initiative“ beinhaltet die neue Drupal-Version mehrere Composer-Tools, die Entwicklern die Arbeit erleichtern sollen, direkt im Drupal Core. Durch diese Integration in den Core werden die Tools vor jedem neuen Release aktualisiert und entsprechend getestet und die Community ist somit im Falle von Änderungen vollkommen abgesichert.

Die Verbindung zwischen Drupal und Composer ist nicht vollkommen neu. Schon in Drupal 7 gab es Initiativen, die die Nutzung des Composers in Drupal unterstützten  – wie zum Beispiel den Composer Manager. Doch erst seit Drupal 8 kann man von einer echten Integration sprechen. Drupal begann, externe Abhängigkeiten zu inkludieren, und es entstand die Notwendigkeit, diese auch zu verwalten – und so kommt Composer zum Einsatz.

Hiermit öffnete sich Drupal dem Rest der PHP-Welt und Composer wurde dazu verwendet, interne Abhängigkeiten zu verwalten. Die Art und Weise, Drupal-Seiten zu erstellen, war jedoch immer noch die traditionelle, basierend auf dem Download eines Tarballs, in dem die Abhängigkeiten bereits gebündelt waren. Der nächste Schritt bestand darin, Drupal in ein standardisiertes PHP-Tool umzuwandeln und die Core- und Contribmodule als Composer-Pakete bereitzustellen, die mithilfe einer generischen „composer.json-Datei“ verwaltet werden konnten.

Das war wahrscheinlich die seit Jahren größte Veränderung im Drupal-Entwicklungsworkflow. Es erschienen verschiedene Ansätze, aber das Drupal-Project
galt als De-facto-Standard und wurde von einem großen Teil der Drupal-Community angenommen. Durch die Einführung des Composer-Ansatzes für die Drupal-Entwicklung wurde die Architektur näher an die PHP-Standards herangeführt und die Community lernte neue Methoden, um Projekte zu verwalten und bereitzustellen.

Jetzt, wo die Community erfahren genug und es gewohnt ist, mit Composer zu arbeiten, ist es an der Zeit, diesen Workflow vollständig in die Kernsoftware zu integrieren. Drupal 8.8 wird mit mehreren Composer-Plugins und -Templates ausgeliefert. Anbei ist eine kurze Auflistung der neuen Komponenten:

  • drupal/core-composer-scaffold: Dieses Plugin ist hauptsächlich der Ersatz des drupal-composer/drupal-scaffold-Plugins im Core und es ist für die Automatisierung des Scaffoldings des Drupal-Core-Composer-Pakets an der richtigen Stelle verantwortlich. Es verfügt über mehrere Optionen, um verschiedene Setup-Ansätze und das Überschreiben der Scaffold-Dateien out-of-the-Box zu ermöglichen. Hier die Referenz: Using Drupal's Composer Scaffold
  • drupal/core-vendor-hardening: Das Plugin entfernt unnötige Ordner aus vendor-Verzeichnissen wie Tests oder Dokumentationen, um diese zu bereinigen. Der Vorgang ist notwendig, wenn der vendor-Ordner im Docroot (Stammverzeichnis) enthalten ist.
  • drupal/recommended-project: Die Composer-Vorlage generiert eine von Drupal 8.8+ empfohlene Projektstruktur, bei der sich der vendor-Ordner außerhalb der Docroot befindet. Dies ist hauptsächlich der Ersatz im Core für: drupal-composer/drupal-project
  • drupal/legacy-project: Mit diesem Composer-Template wird ein Drupal-Projekt gemäß der traditionellen Struktur erstellt, bei dem sich das gesamte Projekt in einem einzigen Ordner befindet, genau wie durch das Herunterladen des Drupal.org-Tarballs. Diese Vorgehensweise ist für Projekte ab Version 8.8+ aber nicht empfehlenswert.

Diese Composer-spezifischen Komponenten befinden sich im neuen Composer-Ordner im Source Codedes Drupal-Cores.

Die Composer-Support-Initiative arbeitet jedoch nicht nur an den Projekten, die zusammen mit dem Drupal Core ausgeliefert werden. Derzeit gibt es auch einige Composer-Metapakete, die unter anderem die Drupal-Entwicklungserfahrung verbessern sollen:

  • drupal/core-recommended: Das ist ein Metapaket, das die spezifischen Versionen der Drupal-Coreabhängigkeiten für jede Drupal-Version enthält, um Konflikte und unerwartetes Verhalten aufgrund falscher Abhängigkeiten zu vermeiden. Es ist ein offizieller Ersatz für: webflo/drupal-core-strict
  • drupal/dev-dependencies: Dieses Metapaket bündelt alle notwendigen Drupal-Abhängigkeiten, um Drupal-Tests durchzuführen. Daher ist es für die Benutzung der Drupal-Testsuite notwendig. Es ist ein offizieller Ersatz für: webflo/drupal-core-require-dev.

Diese und andere Metapakete werden automatisch mithilfe des Package-Generator-Tools oder über sogenannte „post-update hooks“ generiert.
Die vollständige Liste der Drupal-bezogenen Composer-Pakete befindet sich hier: https://github.com/drupal.

Da nun alle neuen Pakete und Composer eingeführt sind, ist es an der Zeit, ihre Arbeitsweise in der Praxis zu betrachten. Um ein neues Drupal-Projekt zu erstellen, muss man nur Folgendes eingeben:

composer -n create-project -s dev drupal/recommended-project my-project

Dieser Befehl generiert ein neues Drupal-Projekt unter Verwendung der empfohlenen Projektvorlage (core-recommended-project Template) mit den folgenden Komponenten:

  • drupal/core-recommend: Metapaket, das die richtige Drupal-Core-Version und alle ihre Abhängigkeiten enthält
  • drupal/dev-dependencies: Metapaket einschließlich aller notwendigen Abhängigkeiten für den Fall eines Drupal-Tests
  • drupal/core-composer-scaffold: Plugin, um alle Drupal-spezifischen Dateien wie index.php an der richtigen Stelle und den vendor-Ordner außerhalb des Docroots zu platzieren

Fazit: Die neuen Funktionen von Drupal 8.8 zahlen auf die gewünschte offizielle Composer-Unterstützung im Core ein und ermöglichen zusätzlich noch viele weitere Verbesserungen im Entwicklungszyklus, wie z. B. eine bessere Kontrolle der Abhängigkeiten.

Drupal 8.8 befindet sich jedoch noch in der Alpha-Phase und einige neue Änderungen könnten die Liste der oben aufgeführten Funktionen und Tools bald ergänzen. Wir empfehlen daher, die Seite Composer related issues in Drupal.org zu besuchen.

Abschließend möchten wir uns bei allen bedanken, die es ermöglicht haben, die Drupal-Entwicklung zugänglicher und offener zu machen. Bis dahin war es ein langer und herausfordernder Weg, insbesondere bis die Integration in den  Drupal Core fertiggestellt war.

Wir können es kaum erwarten. Und Sie?

Referenzen:

  1. https://www.drupal.org/about/strategic-initiatives/composer
  2. https://www.drupal.org/project/issues/search?issue_tags=composer%20initiative
  3. https://www.drupal.org/docs/develop/using-composer/using-drupals-composer-scaffold
  4. https://git.drupalcode.org/project/drupal/tree/8.8.x/composer
  5. https://github.com/drupal