Ada perbedaan mendasar sebenarnya antara tanda caret (^) dan tanda (~) pada Composer.json? Mungkin agan-agan pernah bertanya begiut.
Salah penggunaan, bisa berakibat salah versi dependensi.
Apa akibat dari salah dependensi versi tersebut? Paling parah adalah apps yang kita buat tidak berjalan lagi.
Tanda ~ (tilde) mempunyai hasil query di Composer sebagai berikut:
[sourcecode]
~1.0 berarti >=1.0.0 dan <2.0.0 seperti 1.*
~1.0.0 berarti >=1.0.0 dan <1.1.0 seperti 1.0.*
[/sourcecode]
sedangkan tanda ^ (caret) mempunyai hasil query di Composer sebagai berikut:
[sourcecode]
^1.0 berarti >=1.0.0 dan <2.0.0 seperti 1.*
^1.0.0 berarti >=1.0.0 dan <2.0.0 seperti 1.*
[/sourcecode]
Sayangnya, Semver (salah satu core library dari Composer) berlaku tidak sempurna jika berlaku untuk versi kurang dari 1.0.
Contohnya, jika target kita ada library dengan versi 0.2 sampai dengan 0.3:
~0.2 berarti >= 0.2.0 dan < 1.0.0
dimana jika memakai tanda ^, inilah yang kita dapat:
^0.2 berarti >= 0.2.0 dan < 0.3.0
Jadi, sebelum terlambat, khususnya jika kita pakai library yang belum stable (< 1.0), silakan gunakan tanda ^ daripada tanda ~.