1. Projekt-Setup
# Standard-Installation (aktuellste Version)
composer create-project drupal/recommended-project mein-projekt
# Bestimmte Version erzwingen (z. B. für Legacy-Support)
composer create-project drupal/recommended-project:^10.3 mein-projekt
2. Module & Themes verwalten
# Modul installieren
composer require drupal/modulname
# Dev-Tools installieren (nur lokal, z. B. Devel)
composer require --dev drupal/devel
# Spezifische Version anfordern
composer require drupal/token:^1.9
# Modul entfernen
composer remove drupal/modulname
3. Updates & Wartung
# Alles aktualisieren (Vorsicht!)
composer update
# Nur ein bestimmtes Modul updaten (sicherer)
composer update drupal/admin_toolbar
# Drupal Core updaten (inkl. Abhängigkeiten)
composer update drupal/core-recommended --with-dependencies
# Simulation: Was würde passieren? (vor großen Updates wichtig!)
composer update --dry-run
4. Debugging
# Warum ist dieses Paket überhaupt da?
composer why drupal/token
# Warum kann ich Paket X nicht installieren?
composer why-not drupal/problematic_module
# Alle veralteten Pakete anzeigen
composer outdated
5. Composer und Drush kombinieren
Composer holt den Code, Drush erledigt die Arbeit in der Datenbank. Der Standard-Workflow:
- composer require drupal/modulname – Code holen
- ./vendor/bin/drush en modulname – Modul aktivieren
- ./vendor/bin/drush cr – Cache leeren
6. Patches anwenden
Manchmal hat ein Modul einen Bug, den die Community schon gefixt hat, der aber noch nicht im Release ist. Patch-Plugin installieren:
composer require cweagans/composer-patches
In der composer.json:
"extra": {
"patches": {
"drupal/core": {
"Fix Critical Bug #12345": "https://www.drupal.org/files/issues/fix.patch"
}
}
}
7. Deployment
# Installiert exakt die Versionen aus der .lock-Datei (keine Updates!)
# --no-dev lässt Test-Tools weg, --optimize-autoloader beschleunigt PHP
composer install --no-dev --optimize-autoloader
Verzeichnisstruktur: Was gehört ins Git?
- Committen: composer.json (dein Wunschzettel), composer.lock (dein Kassenbon – extrem wichtig), /config (deine exportierten Drupal-Configs), /web/modules/custom (deine selbstgeschriebenen Module)
- Ignorieren (.gitignore): /vendor, /web/core, /web/modules/contrib – Composer baut diese Ordner selbst
Ein typischer Arbeitstag
- Check: Gibt es Updates? → composer outdated
- Test: Trockenübung → composer update --dry-run
- Update: Ziehen → composer update
- DB-Sync: Datenbank anpassen → drush updb
- Clean: Cache leeren → drush cr
- Save: Commit → git add composer.json composer.lock