Mit Versionsvorgaben lässt sich bei der Installation eines Drupal-Moduls festlegen, welche Versionen Composer verwenden darf.
Composer – Versionsvorgaben (Version Constraints)
Mit Versionsvorgaben lässt sich bei der Installation eines Drupal-Moduls festlegen, welche Version oder welcher Versionsbereich von Composer verwendet werden darf. Composer bezeichnet diese Vorgaben als «Version Constraints».
Eine Versionsnummer folgt üblicherweise diesem Schema:
1.13.2
│ │ └─ Patch
│ └──── Minor
└────── MajorFür Drupal besonders relevant
1. Exakte Version
composer require 'drupal/pathauto:1.13.0'Installiert exakt Version 1.13.0.
Composer darf keine neuere Version verwenden, solange diese Vorgabe nicht geändert wird.
Sinnvoll beispielsweise, wenn gezielt eine bestimmte Modulversion installiert oder ein Update-Verhalten getestet werden soll.
2. Caret-Vorgabe ^
composer require 'drupal/pathauto:^1.13'
Beispiele:
^1.0 >= 1.0.0 und < 2.0.0
^1.1 >= 1.1.0 und < 2.0.0
^1.13 >= 1.13.0 und < 2.0.0
^2.3 >= 2.3.0 und < 3.0.0Das Caret erlaubt kompatible Updates, verhindert aber grundsätzlich denautomatischen Sprung über die nächste inkompatible Versionsgrenze.
Für stabile Drupal-Contrib-Module ist dies eine sehr gebräuchliche Vorgabe.
Achtung bei 0.x-Versionen:
^0.3 >= 0.3.0 und < 0.4.0
^0.3.2 >= 0.3.2 und < 0.4.0Bei 0.x-Versionen ist die erlaubte Spanne enger.
3. Development-Version / Dev-Branch
composer require 'drupal/modulename:1.x-dev'Installiert eine Development-Version bzw. einen Development-Branch.
Die composer.lock hält den konkret aufgelösten Stand fest. Bei Dev-Versionen wird dabei auch die konkrete Source-Referenz bzw. Commit-ID gespeichert.
Dev-Versionen sollten nur verwendet werden, wenn dafür ein konkreter Grund besteht, beispielsweise wenn eine benötigte Korrektur noch nicht als stabiles Release veröffentlicht wurde.
Weitere Composer-Versionsvorgaben
4. Tilde-Vorgabe ~
~1.13 >= 1.13.0 und < 2.0.0
~1.13.2 >= 1.13.2 und < 1.14.0Die Tilde erlaubt Updates innerhalb eines bestimmten Versionsbereichs. Wird eine Patch-Version angegeben, ist sie enger als eine entsprechende Caret-Vorgabe.
Unterschied zwischen ^ und ~
Das Caret ^ erlaubt Updates bis zur nächsten inkompatiblen Versionsgrenze.
Die Tilde ~ hält dagegen die zuletzt fest angegebene Versionsstufe fest und
erlaubt Updates innerhalb des verbleibenden Bereichs.
Bei zwei angegebenen Stellen verhalten sich ^ und ~ daher häufig identisch:
^1.0
>= 1.0.0 und < 2.0.0
z. B. 1.1.0, 1.23.0 oder 1.99.0
~1.0
>= 1.0.0 und < 2.0.0
z. B. 1.1.0, 1.23.0 oder 1.99.0
Bei drei angegebenen Stellen zeigt sich der Unterschied:
^1.0.0
>= 1.0.0 und < 2.0.0
z. B. 1.0.1, 1.5.0 oder 1.99.99
~1.0.0
>= 1.0.0 und < 1.1.0
z. B. 1.0.1 oder 1.0.99, aber nicht 1.1.0
Merksatz:
^1.0.0
→ Minor- und Patch-Updates innerhalb 1.x erlaubt.
~1.0.0
→ Nur Patch-Updates innerhalb 1.0.x erlaubt.5. Wildcard *
1.* >= 1.0.0 und < 2.0.0
1.13.* >= 1.13.0 und < 1.14.0Der Stern steht für beliebige Versionen an dieser Stelle.
6. Vergleichsoperatoren
>=1.13 Version 1.13.0 oder neuer.
>1.13 Grösser als Version 1.13.
<=1.15 Bis und mit Version 1.15.
>=1.13 <1.15 Ab Version 1.13.0, aber kleiner als Version 1.15.0.Damit lassen sich Versionsbereiche sehr exakt definieren.
7. Versionsbereich mit Hyphen
1.13 - 1.15Definiert einen zusammenhängenden Versionsbereich.
Die genaue obere Grenze hängt davon ab, wie vollständig die Versionsnummer auf der rechten Seite angegeben wurde.
8. Oder-Verknüpfung ||
^1.13 || ^2.0Erlaubt mehrere alternative Versionsbereiche.
Beispielsweise:
Eine kompatible 1.x-Version ab 1.13 ODER eine kompatible 2.x-Version ab 2.0.
composer.json und composer.lock
- composer.json
Definiert, WAS das Projekt benötigt und welche Versionen erlaubt sind. - composer.lock
Definiert, WELCHE konkreten Versionen Composer tatsächlich aufgelöst hat.
Beide Dateien gehören ins Git-Repository.
Bei einer Installation mit vorhandener composer.lock werden die dort festgehaltenen Versionen installiert. Dadurch erhalten verschiedene Installationen des Projekts denselben Dependency-Stand.