Das Dokument deckt alle wesentlichen Bereiche ab: von der Projekteinrichtung über Modul- und Theme-Management bis hin zur Performance-Optimierung und Deployment-Strategien. Besonderer Fokus liegt auf der Integration von Drush-Kommandos, dem Patch-Management und der korrekten Verzeichnisstruktur für Composer-basierte Drupal-Projekte.
Diese Referenz dient als praktisches Nachschlagewerk für den täglichen Entwicklungsworkflow und enthält bewährte Praktiken aus der Drupal-Community. Sie unterstützt Entwickler dabei, ihre Produktivität zu steigern und häufige Fehler bei der Composer-Nutzung zu vermeiden.
Projekt Setup
Neues Drupal-Projekt erstellen
Standard Drupal-Projekt anlegen
composer create-project drupal/recommended-project mein-projekt
Mit spezifischer Version
composer create-project drupal/recommended-project:^11.2.3 mein-projekt
Ohne sofortige Installation
composer create-project --no-install drupal/recommended-project mein-projekt
Repository konfigurieren
composer config repositories.drupal composer https://packages.drupal.org/8
📦 Module & Themes verwalten
Installation
Modul installieren
composer require drupal/admin_toolbar
Theme installieren
composer require drupal/bootstrap
Dev-Abhängigkeiten mitinnstallieren
composer require --dev drupal/devel
Spezifische Version
composer require drupal/pathauto:^1.8
composer require drupal/token:1.x-dev
Aktualisierungen
Alle Pakete aktualisieren
composer update
Spezifisches Paket aktualisieren
composer update drupal/admin_toolbar
Das Kernsystem (Drupal Core) mit Abhängigkeiten aktualieiren
composer update drupal/core --with-dependencies
Dry-Run (Test)
composer update --dry-run
Paket Entfernen
composer remove drupal/admin_toolbar
🔍 Informationen & Debugging
Paket-Informationen
Alle installierten Pakete anzeigen
composer show
composer show --installed
Nur Drupal-Pakete anzeigen
composer show drupal/*
Veraltete Pakete finden
composer outdated drupal/*
Paket-Details anzeigen
composer show -a drupal/admin_toolbar
Abhängigkeiten analysieren
Warum ist ein Paket installiert?
composer why drupal/token
Warum kann ein Paket nicht installiert werden?
composer why-not drupal/problematic_module
Abhängigkeitsbaum anzeigen
composer show --tree
Suche
Nach Paketen suchen
composer search admin*tool* composer search "admin toolbar"
🛠️ Drush Integration
Drush Installation
composer require --dev drush/drush
Version prüfen
./vendor/bin/drush --version
Status anzeigen
./vendor/bin/drush status
Wichtigste Drush-Befehle
Module aktivieren/deaktivieren
./vendor/bin/drush en admin_toolbar
./vendor/bin/drush dis admin_toolbar
Datenbank-Updates
./vendor/bin/drush updb
Cache leeren
./vendor/bin/drush cr
Installierte Module auflisten
./vendor/bin/drush pml
Sicherheitsupdates prüfen
./vendor/bin/drush sec
🩹 Patch-Management
Patch-Plugin installieren
composer require cweagans/composer-patches
Composer.json Konfiguration
{ "extra": { "enable-patching": true, "composer-exit-on-patch-failure": true, "patches": { "drupal/core": { "Fix für Issue #123456": "https://www.drupal.org/files/issues/patch.patch" }, "drupal/views": { "Lokaler Fix": "patches/views-fix.patch" } } } }
⚡ Performance & Optimierung
Composer optimieren
Composer selbst aktualisieren
composer self-update
Autoloader optimieren
composer dump-autoload --optimize
Cache leeren
composer clear-cache
Memory-Limit erhöhen (temporär)
php -d memory_limit=2G composer require drupal/large-module
Produktivinstallation
composer install --no-dev --optimize-autoloader --no-suggest
🔧 Validierung & Maintenance
Projektvalidierung
Composer.json validieren
composer validate
Diagnose ausführen
composer diagnose
Veraltete Pakete prüfen
composer outdated
Sicherheitsprobleme prüfen
composer audit
📁 Typische Verzeichnisstruktur
mein-projekt/
├── composer.json Abhängigkeiten & Konfiguration
├── composer.lock Exakte Versionen (committen!)
├── vendor/ Composer-Abhängigkeiten (nicht committen)
├── web/ Webroot
│ ├── core/ Drupal Core (nicht committen)
│ ├── modules/
│ │ ├── contrib/ Contrib-Module (nicht committen)
│ │ └── custom/ Custom-Module (committen)
│ ├── themes/
│ │ ├── contrib/ Contrib-Themes (nicht committen)
│ │ └── custom/ Custom-Themes (committen)
│ └── sites/
└── config/ Konfiguration (committen)
🗂️ .gitignore Beispiel
gitignore
Composer
/vendor/
/web/core/
/web/modules/contrib/
/web/themes/contrib/
/web/profiles/contrib/
/web/libraries/
Drupal
/web/sites/*/files/
/web/sites/*/private/
/web/sites/*/translations/
Behalten
!/web/sites/default/settings.php
!/web/sites/default/services.yml
🚀 Workflows
Entwicklung
1. composer require drupal/modulname
2. ./vendor/bin/drush en modulname
3. git add composer.json composer.lock
4. git commit -m "Add modulname"
Deployment
1. git pull
2. composer install --no-dev --optimize-autoloader
3. ./vendor/bin/drush updb -y
4. ./vendor/bin/drush cr
Aktualisierungen
1. composer outdated drupal/*
2. composer update --dry-run
3. composer update
4. ./vendor/bin/drush updb -y
5. ./vendor/bin/drush cr
6. git add composer.json composer.lock
7. git commit -m "Abhängigkeiten aktualisiert"
💡 Tipps & Best Practices
- Immer composer.lock committen für identische Versionen im Team
- Nie /vendor/ committen - wird bei composer install generiert
- --dry-run vor großen Updates verwenden
- Memory-Limit erhöhen bei großen Modulen
- Regelmäßig composer outdated prüfen
- Patches dokumentieren in separater README
- Dev-Dependencies für lokale Entwicklung nutzen
Kommentare