Que signifie le tilde (~) dans mon fichier composer.json?

115

J'ai cette ligne dans mon fichier composer.json:

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

Qu'est-ce que le tilde ~en ~2.0@devdire exactement? Est - ce un espace réservé et doit toujours chercher les subversions comme 1.2.0, 2.2.0, 3.2.0et ainsi de suite? Cela n'a pas de sens (et serait fait par le *joker).

La documentation de composer.json ne dit rien sur le tilde.

Je demande parce que je viens de lire sur un problème de sécurité dans le blog Symfony et ils recommandent de passer à la version 1.3.3. Mais comprendre la version de FOSUserBundle n'est pas si simple (je n'ai pas trouvé de fichier contenant la version).

Gottlieb Notschnabel
la source

Réponses:

142

Tilde signifie la prochaine version significative . Dans votre cas, c'est équivalent à >= 2.0, < 3.0.

L'explication complète se trouve sur la page de documentation de la gamme de versions de Tilde :

L' ~opérateur est mieux expliqué par l'exemple: ~1.2est équivalent à >=1.2 <2.0.0, tandis que ~1.2.3est équivalent à >=1.2.3 <1.3.0.

Une autre façon de voir les choses est que l'utilisation ~spécifie une version minimale, mais permet au dernier chiffre spécifié d'augmenter.

Le commentaire ci-dessous de Seldeak est une simple explication récapitulative de la documentation de Composer.

AlterPHP
la source
73
Une règle empirique simple que j'aime dire est que le ~ permet au dernier chiffre de monter. par exemple ~2.2signifie 2,2 et n'importe quel 2.x où x est égal ou supérieur à 2. ~2.1.3sur le est également tout 2.1.x où x est 3 ou plus.
Seldaek
2
En quoi est-ce ~2.0différent de 2.*? Est-ce seulement utile si le dernier chiffre n'est pas 0?
Jesse
24
~ 2.0 et 2. * sont les mêmes MAIS ~ 2.3 et 2. * sont différents car ~ 2.3 n'autorise pas les versions inférieures à 2.3 alors que 2. * permet 2.0, 2.1, 2.2, etc.
AlterPHP
2

TildeL'opérateur est utile pour les projets qui version leurs bibliothèques à l'aide de semantic versioningschéma.

Semantic versioningest plus une directive qui évalue à la next significant release.

Pour Composer, cet opérateur signifie autoriser les versions mineures (qui peuvent inclure des correctifs) sans autoriser une version majeure (qui peut ne pas être rétrocompatible) lors de l' installation et de la mise à jour .

Par exemple: ~4.1autorisera les versions de projet >=4.1mais <5.0.

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

Pranav Rana
la source
0

Le tilde ~à ~2.0@dev dire exactement d'aller pour la version immédiate:

Par exemple :

Si nous l'avons, ~2.0@devil passe à la prochaine version immédiate => ~2.x@dev

Selim Reza
la source