2013-09-24 6 views
97

Mam ten wiersz w moim pliku composer.json:Co oznacza tylda (~) w moim pliku composer.json?

"require": { 
    ... 
    "friendsofsymfony/user-bundle": "[email protected]", 
    ... 
}, 

Co tyldy ~ w [email protected] dokładnie oznacza? Czy jest to element zastępczy i zawsze przyciąga subwersje takie jak 1.2.0, 2.2.0, 3.2.0 i tak dalej? Nie ma sensu (i byłby wykonywany za pomocą wieloznacznika *).

composer.json documentation nic nie mówi o tyldach.

Pytam, ponieważ właśnie przeczytałem o security issue in the Symfony blog i zalecają uaktualnienie do wersji 1.3.3. Ale znalezienie wersji FOSUserBundle nie jest takie proste (nie mogłem znaleźć pliku zawierającego wersję).

Odpowiedz

123

Tilde oznacza następne ważne wydanie. W twoim przypadku jest to odpowiednik >= 2.0, < 3.0.

Pełne wyjaśnienie jest Tilde Version Range docs page:

Operator ~ najlepiej wyjaśnione np ~1.2 odpowiada >=1.2 <2.0.0, a ~1.2.3 odpowiada >=1.2.3 <1.3.0.

Inny sposób patrzenia na to to, że użycie ~ określa minimalną wersję , ale pozwala na podciągnięcie ostatniej cyfry.

Poniższy komentarz Seldeaka jest prostym podsumowaniem objaśnień dokumentacji Kompozytora.

+65

Prosta zasada-of-kciuk sposób chciałbym umieścić to, że ~ pozwala ostatnia cyfra iść w górę. na przykład "~ 2.2" oznacza 2.2 i 2.x gdzie x wynosi 2 lub więcej. '~ 2.1.3' na jest również dowolnym 2.1.x gdzie x wynosi 3 lub więcej. – Seldaek

+1

Czym różni się "~ 2.0" od "2. *"? Czy jest to przydatne tylko wtedy, gdy ostatnia cyfra nie jest równa 0? – Jesse

+18

~ 2.0 i 2. * są takie same, ALE ~ 2.3 i 2. * są różne, ponieważ ~ 2.3 nie pozwala na wersje poniżej 2.3, natomiast 2. * pozwala na 2.0, 2.1, 2.2 itd. – AlterPHP

2

Tilde Operator jest przydatny w przypadku projektów, w których wersja ich bibliotek korzysta ze schematu semantic versioning.

Semantic versioning jest bardziej wytyczną, która ocenia next significant release.

Dla Composer, to znaczy, aby umożliwić operatorowi mniejsze wersje (które mogą zawierać łatki), nie pozwalając główną wersję (które mogą nie być kompatybilne wstecz) podczas instalacji i aktualizowania.

Na przykład: ~4.1 zezwala na wersje projektu >=4.1, ale <5.0.

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