Verwalten von Modulbibliotheksabhängigkeiten mit Composer

9

Ich habe festgestellt , Abhängigkeiten in einem benutzerdefinierten Modul mit Drupal-Komponist , Wie kann ich einen Dritten Bibliothek in meinem benutzerdefinierten Modul umfassen ohne Composer - Manager und Wie contrib Module Komponist Abhängigkeiten von Drupal 8 verwalten , die auf meine Frage releated sind, aber keine scheinen länger zu gelten, seit Drupal 8.1 und die Abwertung des Composer-Managers .

Auch beliebte Anleitungen wie Die endgültige Einführung in D8 und Composer scheinen nicht mehr zu gelten, da sie auch den Composer Manager erwähnen.

Die andere Lösung, die sich dem Composer-Manager widersetzt, ist das Ändern der Core-Datei composer.json, die sich wie zu viel Core-Hacking anfühlt und wahrscheinlich mit jedem Drush-Update von Drupal Core (?) Brechen würde.

Insbesondere versuche ich, Views vCards von Drupal 7 auf 8 zu aktualisieren . Ich habe meine Datei composer.json wie folgt erstellt:

{
  "name": "drupal/views_vcards",
  "description": "Allows creation of vCards using the fields provided by the Views module.",
  "type": "drupal-module",
  "license": "GPL-2.0+",
  "homepage": "https://drupal.org/project/views_vcards",
  "require": {
    "maennchen/zipstream-php": "0.3.*"
  }
}

Aber wenn ich eine composer.json-Datei in meinen Modulordner lege, wie mache ich Drupal darauf aufmerksam, dass diese Datei vorhanden ist, und wie stelle ich sicher, dass die erforderliche zipstream-phpBibliothek heruntergeladen wird?

Durch einfaches Ausführen composer updateaus dem Drupal-Stammverzeichnis werden viele Drupal-Abhängigkeiten aktualisiert, jedoch nicht die Dateien composer.json, die sich in den Modulordnern befinden. Ich gehe auch nicht davon aus, dass ich composer installaus allen Modulen mit Abhängigkeiten heraus anrufen sollte .

Wie mache ich Drupal auf die Abhängigkeit eines Moduls aufmerksam, ohne den Composer Manager und / oder den Hacking Core zu verwenden?

AKTUALISIEREN:

Das vom Core verwendete Composer-Merge-Plugin scheint einen Platzhalterpfad zu unterstützen:

{
    "require": {
        "wikimedia/composer-merge-plugin": "dev-master"
    },
    "extra": {
        "merge-plugin": {
            "include": [
                "composer.local.json",
                "extensions/*/composer.json" // < ---- THIS LINE
            ],
            "require": [
                "submodule/composer.json"
            ],
            "recurse": true,
            "replace": false,
            "merge-dev": true,
            "merge-extra": false
        }
    }
}

Warum verschmilzt der Kern nicht modules/*/composer.json, das würde alles richtig lösen?

Update 2:

Die Gründe dafür, dies nicht zu unterstützen, werden in dieser Ausgabe behandelt (die auch seit einiger Zeit still ist).

Neograph734
quelle
1
Das Bearbeiten der Hauptkomponente des Komponisten erfolgt auf korrigierte Weise.
Eyal
Wenn Sie Composer alle Ihre Abhängigkeiten verwalten lassen (einschließlich Kern), verschwindet Ihr Problem. Siehe packagist.org/packages/drupal/core
Eyal
Hier ist ein Beispiel für eine Komponistendatei, die ich für eine andere Frage geschrieben habe: drupal.stackexchange.com/a/187097/40011
Eyal
Danke für die Antwort @Eyal. Die Verwaltung aller Contrib-Module über die composer.jsonDatei ist also die neue empfohlene Methode, und Drush zum Herunterladen und Installieren von Modulen wird ersetzt. Offensichtlich wird Composer verschachtelte Abhängigkeiten automatisch auflösen und tatsächlich auch meine Abhängigkeiten herunterladen.
Neograph734

Antworten:

6

Neue Methode mit Drupal-Gerüst für größte Flexibilität

Für Drupal 8.4.0 und höher mit drush> 9.0.0 ist drush make veraltet und Sie sollten einen vollständigen Composer-Workflow verwenden, wie in den unten stehenden Dokumentationslinks von drupal.org beschrieben. Diese Links empfehlen die Verwendung eines Composer-Projekts, dies funktioniert jedoch möglicherweise nicht für alle Webserver-Setups. Im Folgenden wird Schritt für Schritt beschrieben, wie Sie composer.json manuell einrichten, um detaillierte Informationen zu erhalten. Die Anweisungen zum manuellen Hinzufügen von Modulen können weiterhin ausgeführt werden.

# Initialize composer. Stability alpha is important for custom modules that may be source managed outside of packagist or drupal.org
composer init --name myvendor/mysite --stability=alpha --license=GPLv2
composer config repositories.drupal composer https://packages.drupal.org/8
composer config discard-changes true

Anschließend müssen Sie composer.json basierend auf Ihren Einstellungen manuell Folgendes hinzufügen, da dies mit Composer as as is nicht automatisch möglich ist. Diese konfigurieren drupal-scaffold so, dass Ihre Module dort installiert werden, wo Sie sie möchten (im Gegensatz zu einem Hersteller oder einem Verzeichnis, das von einem anderen Entwickler ausgewählt wurde). Ändern Sie "Webroot" in "www" oder "public" oder was Ihr Host ist.

    "extra": {
        "installer-paths": {
            "webroot/core": ["type:drupal-core"],
            "webroot/modules/contrib/{$name}": ["type:drupal-module"],
            "webroot/modules/custom/{$name}": ["type:drupal-custom-module"],
            "webroot/themes/contrib/{$name}": ["type:drupal-theme"],
            "webroot/themes/custom/{$name}": ["type:drupal-custom-theme"],
            "webroot/profiles/{$name}": ["type:drupal-profile"],
            "webroot/libraries/{$name}": ["type:drupal-library"]
        },
        "patches": {}
    },
    "scripts": {
        "drupal-scaffold": "DrupalComposer\\DrupalScaffold\\Plugin::scaffold"
    }

Jetzt können Sie einige Abhängigkeiten installieren. Beachten Sie, dass Composer Skripte und Plugins verwenden muss, damit dies funktioniert.

composer require composer/installers:^1.4.0 drupal-composer/drupal-scaffold:^2.3.0 cweagans/composer-patches:^1.6.2

Führen Sie das Drupal-Scaffold-Skript einmal aus (oder nach Bedarf auf Ihrem Build-Server):

composer drupal-scaffold

Drupal-Kern, Module, Themes usw. können gemäß den folgenden Anweisungen ohne das Drupal-Merge-Plugin installiert werden.

composer require drupal/core:~8.5.1 drupal/views_vcards

Ältere Methode mit Drupal-Merge-Plugin oder direkt mit Core arbeiten

Für Drupal 8.1.0 und höher können Sie Composer verwenden, um Drupal-Module direkt zu benötigen. Die Dokumentation zur Verwendung von Composer in einem Drupal-Projekt und zur Verwendung von Composer zur Installation von Drupal-Paketen über Drupal.org wurde aktualisiert, um die Vorteile des Paketagisten von drupal.org zu nutzen. Ich finde, dass es bereits in einem Bereitstellungsszenario gut funktioniert.

composer config repositories.drupal composer https://packages.drupal.org/8
composer require drupal/views_vcards

Für die Entwicklung denke ich, dass das manuelle Hinzufügen der Abhängigkeit mit gut composer requirefunktioniert. Der Merge-Ansatz funktioniert auch mit dem Drupal-Merge-Plugin und ich verwende ihn für meinen Drush-Make-Workflow.

composer config repositories.drupal composer https://packages.drupal.org/8
composer require mile23/drupal-merge-plugin
composer update

Update 2016.06.22

Ich bin auf ein Problem mit drush make gestoßen, bei dem die traditionellen Drupal-Versions-Tags und die packagist-URLs von drupal.org mit semver hinzugefügt wurden. Zu diesem Zweck musste ich auf die Verwendung des stabileren Packagisten unter https://packagist.drupal-composer.org umsteigen , der weiterhin die traditionellen Drupal-Versions-Tags unterstützt.

Beachten Sie außerdem, dass der Buildserver oder -computer übermäßig viel Speicher benötigt, um ein Composer-Update durchzuführen (oder erforderlich). Dies ist in allen Szenarien erforderlich, in denen das Ausführen eines Composer-Updates auf einem ähnlichen Entwicklungscomputer in Ihrem Buildprozess nicht möglich ist.

Update 2016.09.23

Update 2018.03.30

  • Ich habe eine positive Abstimmung bemerkt. Dies ist ziemlich alt, daher haben wir uns entschlossen, über neuere Entwicklungen zu klären und Ihre Site direkt mit Composer einzurichten, da Drush Make (leider) für eine Weile veraltet ist.
mradcliffe
quelle
1
Ich bin immer noch sehr daran gewöhnt, Drush zum Herunterladen und Installieren von Modulen zu verwenden, aber das wird komplett durch Composer ersetzt?
Neograph734
So macht es drupalci jetzt, aber vorher konnten Sie das Merge-Plugin direkt verwenden. Der Patch, den ich ursprünglich für drupalci geschrieben habe, war drupal.org/files/issues/2597778-composer-contrib-18.patch . Dies wurde festgeschrieben, aber jetzt nicht mehr in der Codebasis, da es vereinfacht ist, den Packagist zu verwenden und alles vom Komponisten iirc aus zu erledigen. Mit TravisCI mache ich auch Folgendes: cgit.drupalcode.org/xero/tree/.travis.yml#n40 . Dies hängt von Ihrem Arbeitsablauf ab.
mradcliffe
Vielleicht lohnt es sich, hier einen Klappentext zu Asset Packagist für Bibliotheken von Drittanbietern mit Composer hinzuzufügen. Diese Methode wird von einer Reihe von Drupal-Distributionen übernommen und wird jetzt auch von mehreren Contrib-Modulen verwendet. Ich habe gerade eine Dokumentation beigelegt, um diese Lösung zu offiziell zu machen. Drupal.org/docs/develop/using-composer/… und drupal.org/docs/develop/using-composer/…
JamesWilson