版本號學習筆記

  • 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 of comparators which specify versions that satisfy the range.

comparators其實就是

Todo…