版本號學習筆記
- 2019 年 12 月 4 日
- 筆記
版本號
作為一名前端工程師,相信大家對npm等包管理工具都比較熟悉,這裡拋出一個先前碰到的問題:
衝突
假設我們存在一個多個項目共用的構建環境runtime,構建工具所依賴的包都安裝在此runtime中,然後各個項目的負責人或者開發人員一起來維護這個公用runtime的package.json。那麼非常有可能,包之間的依賴會出現衝突,特別是當包存在Peer Dependencies的情況(之前的低版本npm安裝會導致NPM ERR報錯):

後續
在了解了什麼是平等依賴以及為什麼安裝失敗後,解決這個問題的辦法有很多,比如:
- 根據項目拆分runtime
- 升級依賴包(防止breaking changes)
- 更換構建實現方式
- 等等
儘管如此,我們還是非常有必要了解一下Npm包管理工具是怎麼做的?
版本比較
在此之前,我們先來了解一下語義化版本,網站介紹的很詳細,這裡直接介紹怎麼進行對比的。

這裡強調一下版本號之間的比較,必須把版本拆分成主版本號Major,次版本號Minor,修訂號Patch以數值比較例如: 1.0.0 < 2.0.0 < 2.1.0 < 2.1.1
當主版本號Major,次版本號Minor,修訂號Patch都相同時,再比較先行版本號Pre-release,先由左到右根據.
標識符分隔比較,直到找到第一個差異值後決定(數值以高低相比,字母以ASCII的排序比較,數字與字母比則數字優先順序較低),比如:1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0- rc.1 < 1.0.0
指定範圍
package.json中指定包版本範圍會更為複雜一些:
A
version range
is a set ofcomparators
which specify versions that satisfy the range.
comparators其實就是
Todo…