Ein paar wichtige Befehle und Regeln zu Composer.
Anführungen in Composer '...'
Generell würde ich mir angewöhnen, immer einfache Anführungen zu nutzen, auch wenn sie nicht immer nötig sind. Im Beispiel ist beides ok.
composer require drupal/token
composer require 'drupal/token'Zwingend verwenden muss man die Anführungen, wenn Sonderzeichen wie * vorkommen, da diese Zeichen von der Shell interpretiert werden können. In der Regel *, aber ja nach Shell auch andere Zeichen. Im Fall von Drupal sind die aber kaum oder gar nicht relevant, oder kommen gar nicht vor.
Beispiel:
composer outdated 'drupal/*'
composer update 'drupal/core-*' with all dependenciesBasics
Korrekte Benennung der einzelnen Positionen.
1.13.2
│ │ └─ Patch
│ └──── Minor
└────── MajorInstallieren
Installiert das Modul automatisch nach /web/modules/contrib und deklariert es in der composer.json unter "require"
composer require 'drupal/token'oder als dev:
Installiert das Modul auch nach /web/modules/contrib, deklariert es aber in composer.json unter "require-dev".
Ist das Modul bereits ohne dev installiert, kann man diesen Befehl einfach ausführen. Composer sieht, dass devel schon da ist und schreibt es in der composer.json in den Bereich "require-dev".
Unter dev liegen Module die man nur für die Entwicklung braucht und durch composer install --no-dev bei der Installation ausgeschlossen werden, damit diese Module auf live gar nicht installiert werden.
composer require --dev 'drupal/devel'Infos zu einem Modul
Damit werden Abhängigkeiten, Source, Version und Konflikte zu gewissen Versionen angezeigt. Sehr informativ. Auf die schnelle sieht man hier auch, mit welcher Core Version das installierte Modul kompatibel ist.
composer show 'drupal/devel'Warum ist ein Paket installiert / Was blockiert ein Update?
Mit why zeigt Composer, warum ein bestimmtes Paket überhaupt im Projekt vorhanden ist bzw. welches andere Paket es benötigt.
composer why 'drupal/token'Mit «why-not» kann geprüft werden, welches Paket eine bestimmte gewünschte Version verhindert. Das ist besonders hilfreich bei Dependency-Konflikten während eines Updates.
composer why-not 'drupal/core' 11.5.0Sehr nützlich ist das auch zur Vorbereitung eines Major-Updates. Beispiel: Das Projekt läuft noch mit Drupal 11 und soll später auf Drupal 12 aktualisiert werden:
composer why-not 'drupal/core' 12.0.0Composer zeigt dann beispielsweise, dass ein installiertes Modul in seiner aktuellen Version nur Drupal 10 und 11 unterstützt. So lassen sich gezielt die Module finden, die vor dem Core-Upgrade auf eine neuere Major-Version aktualisiert oder anderweitig gelöst werden müssen.
Merke:
composer why = Warum ist dieses Paket installiert?
composer why-not = Was verhindert diese gewünschte Version?Deinstallieren
Beim deinstallieren ist wichtig zu unterscheiden, ob ein Modul in Drupal schon aktiviert wurde oder nichht oder ob es noch aktiv ist. Wurde das Modul noch nicht in Drupal aktiviert, kann es einfach mit remove entfernt werden. Wurde es aber schon aktiviert, muss man das Modul immer erst in Drupal deinstallieren (oder via drush). Drupal führt dabei die Uninstall-Routinen des Moduls aus und entfernt die Configuration bzw. Daten, die das Modul bei seiner Deinstallation entfernen soll.
drushh pm:uninstall modulenameDanach kann das Modul in Composer entfernt werden. Composer entfernt damit eintrag in composer.json, composer.lock, Paketcode (sofern er nicht anderwertig gebraucth wird) und nicht mehr benötigte Abhängigkeiten.
composer remove 'drupal/modulname'
composer remove --dev 'drupal/modulname'Downgrade
Wurde aus versehen eine zu neue Version installiert, kann sie ganz einfach durch erneutes require auf die gewünschte Version downgraded werden.
WICHTIG: Wurde das Modul aber schon aktiviert wurden DB-Einträge geschrieben, die ev. mit der neueren Version nicht mehr kompatibel sind. Wenn beim Update keine DB Updates nötig waren, kann es reichen das Modul einfach mit der gewünschten Version downzugraden, ansonsten muss auf eine früher gespeicherte Version mittels db-Dump zurückgegriffen werden.
composer require 'drupal/devel:5.3.1'
composer require --dev 'drupal/devel:5.3.1'