首頁  >  文章  >  開發工具  >  Composer的波浪線符號~和冪符號^到底有啥區別

Composer的波浪線符號~和冪符號^到底有啥區別

藏色散人
藏色散人轉載
2020-08-12 13:16:554027瀏覽

下面由composer教學專欄為大家介紹Composer的波浪線符號~和冪符號^的差別,希望對需要的朋友有幫助!

Composer的波浪線符號~和冪符號^到底有啥區別

曾經看過太多亂寫版本號的(其實現在比以前好很多了),好多1.9.0 的下個版本必然是2.0.0, 2.9 .0 下一個版本必須3.0.0……主要還是因為之前對版本號的命名就沒有規範,大家都是看心情寫。後來 semantic versioning 得到推廣,版本號取名的情況得到改善,但依然有很多人不知道三段式版本號是什麼含義(各種培訓學校你們教一下這些規範會死麼…)。

簡單來說(我也就是搬運一下,上面提到的網站說的更清楚),三段式版本號各個段的含義是:

大版本.小版本.補丁版本

先說最明顯的補丁版本。如果你的軟體或庫,之前有一些 bug 被修復了,此時補丁版本需要 1。

再來來說小版本號。如果你增加了新的功能,例如RPG 遊戲增加了自動拾取東西,或者你的程式碼庫裡增加了一個新的方法,用戶升級了你的程式碼庫也不會導致相容問題(BC),那麼小版本號1。

最後,如果你的軟體完全重構了,或者你的程式碼庫完全重構以至於用戶升級了新的庫必然導致相容問題,那麼大版本號 1。

當然,還會有同時修改了 bug 並增加了功能的情況,總之如果前一位需要 1,無論何種情況後面的位數都必須清零。

對於終端用戶的軟體,其實也用不著太嚴格,因為終端用戶也不太關心版本(除了大版本號…,所以出現了chrome 風格的版本號,火狐也跟著帶壞……),但對於庫文件作者,還是遵守版本號的好,因為你定的版本號,提供了很重要的信息給庫調用者,他們需要通過你的版本號來判斷是否要避免兼容性問題。

舉個比較經典的例子,雖然 Symfony 2/3/4 用起來也都差不多,但是因為這三個版本之間已經出現接口不一致的情況,所以大版本號碼必須得 1。如果你的函式庫檔案有介面改變導致不相容之前版本,哪怕只有一個,也應該將大版本號 1。

而如果你用 Symfony 3.0.x 開發了一些項目,即使直接升級到 3.4.x,理論上也是完全沒有問題的。

說完三段式版本號,再來說一個比較困擾 PHPer 的問題,到底 composer.json 裡指定版本號的 ^ 符號和 ~ 符號到底是什麼意思?有什麼區別?

寫這篇部落格之前其實我在百度上搜了一下,想知道相關的文章是否很多,這篇文章還值得寫否。搜尋結果顯示也的確有人總結過。雖然大都只有一個例子:

~1.2.3 代表1.2.3 <= 版本號碼< 1.3.0

^1.2.3 代表1.2.3 <= 版本號碼< ; 2.0.0

根據以上搬運內容,我再補充一點點,~表示版本號只能改變最末尾那段(如果是~x.y 末尾就是y,如果是~x.y.z 末尾就是z),例如這種情況:

~1.2 等於>=1.2.0; <2.0.0

而^ 符號,就跟上面說了那麼多的semantic versioning 有關係了,它表示盡量使用最新版本,但保證不產生相容問題,換句話說也就是除了大版本號以外,小版本號和補丁版本號都可以變。

但目前看來有一個很重要的細節大家都沒說到,在semantic versioning 裡,0 開頭的版本號是比較特殊的,而因為^ 嚴格遵守semantic versioning 規則,所以會出現以下情況(早先的composer 版本並沒有這樣的處理,後來修正了):

^0.3.0 等於>=0.3.0; <0.4.0

#咦?難道不應該是 <1.0.0 嗎?

究其原因,semantic versioning 的規定是,大版本號以 0 開頭表示這是一個非穩定版本(unstable),如果處於非穩定狀態,小版本號是允許不向下兼容的!所以如果你要指定0 開頭的庫那一定要注意:

~0.1 這種寫法是很危險的,因為~0.1 等於>=0.1.0; <1.0.0,可能出現無法向下相容的情況,比較保險的寫法還是

^0.1(等於>=0.1.0; <0.2.0)

以上是Composer的波浪線符號~和冪符號^到底有啥區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:chrisyue.com。如有侵權,請聯絡admin@php.cn刪除