Was bedeutet die Tilde (~) in meiner Datei composer.json?

115

Ich habe diese Zeile in meiner Datei composer.json:

"require": {
    ...
    "friendsofsymfony/user-bundle": "~2.0@dev",
    ...
},

Was bedeutet die Tilde ~in ~2.0@devgenau bedeuten? Ist das ein Platzhalter und wird immer holen die Umstürze wie 1.2.0, 2.2.0, 3.2.0und so weiter? Macht keinen Sinn (und würde von der *Wildcard gemacht werden).

Die composer.json-Dokumentation sagt nichts über die Tilde aus.

Ich frage, weil ich gerade im Symfony-Blog über ein Sicherheitsproblem gelesen habe und sie empfehlen, auf Version 1.3.3 zu aktualisieren. Es ist jedoch nicht so einfach, die Version von FOSUserBundle herauszufinden (ich konnte keine Datei finden, die die Version enthält).

Gottlieb Notschnabel
quelle

Antworten:

142

Tilde bedeutet nächste bedeutende Veröffentlichung . In Ihrem Fall ist es gleichbedeutend mit >= 2.0, < 3.0.

Die vollständige Erklärung finden Sie auf der Dokumentationsseite des Tilde-Versionsbereichs :

Der ~Operator lässt sich am besten anhand eines Beispiels erklären: ~1.2ist äquivalent zu >=1.2 <2.0.0, während ~1.2.3äquivalent zu >=1.2.3 <1.3.0.

Eine andere Sichtweise ist, dass using ~eine Mindestversion angibt, die zuletzt angegebene Ziffer jedoch nach oben geht.

Der folgende Kommentar von Seldeak ist eine einfache Zusammenfassung der Composer-Dokumentation.

AlterPHP
quelle
73
Eine einfache Faustregel, die ich gerne formuliere, ist, dass mit ~ die letzte Ziffer nach oben geht. zB ~2.2bedeutet 2.2 und jedes 2.x, wobei x 2 oder höher ist. ~2.1.3auf dem ist auch jedes 2.1.x, wobei x 3 oder höher ist.
Seldaek
2
Wie ist ~2.0anders als 2.*? Ist es nur nützlich, wenn die letzte Ziffer nicht 0 ist?
Jesse
24
~ 2.0 und 2. * sind gleich, ABER ~ 2.3 und 2. * sind unterschiedlich, da ~ 2.3 keine Versionen unter 2.3 zulässt, während 2. * 2.0, 2.1, 2.2 usw.
zulässt
2

TildeDer Operator ist nützlich für Projekte, die ihre Bibliotheken mithilfe des semantic versioningSchemas versionieren.

Semantic versioningist eher eine Richtlinie, die nach dem bewertet next significant release.

Für Composer bedeutet dieser Operator, dass kleinere Versionen (die Patches enthalten können) zugelassen werden, ohne dass während der Installation und Aktualisierung eine Hauptversion (die möglicherweise nicht abwärtskompatibel ist) zugelassen wird .

Zum Beispiel: ~4.1das Projekt Versionen erlauben >=4.1aber <5.0.

Credits: http://dwellupper.io/post/37/using-tilde-range-operator-to-resolve-dependency-version-in-composer-php

Pranav Rana
quelle
0

Die Tilde ~in ~2.0@dev genau Mittel gehen zur sofortigen Ausführung bis:

Zum Beispiel :

Wenn wir es haben ~2.0@dev, geht es sofort zur nächsten Version => ~2.x@dev

Selim Reza
quelle