Package.json裡^、~的版本控制符號意義

語意化版本號

在說明之前,先科普一下版本號各自代表的意義
一般來說,大部份軟體版本號分3段,如A.B.C
A: 大版本號,通常在整體重寫、或跟前一版差距較大且有可能不相容時,則A+1。通常0代表開發階段。
B: 功能更新。當有增加新功能時,B+1。
C: 小修改。如修復BUG。只要有小修正就C+1。

雖然不是一定,但大部份慣性來說就是如此

Package.json的版本控制符號~^

npmjs官方文件就已經有針對版本號有詳細的說明了

1
2
~version: Approximately equivalent to version
^version: Compatible with version

雖然英文單字都看得懂,但看完還是看不出來有啥差別XD

~^最大差別就是鎖定的版本號位置不得高於該版本號碼

^:鎖住第一碼(即A) 不得變更。如^1.2.2,則安裝範圍是>=1.2.2<2.0.0。即須符合1.*.*
~:鎖住第二碼(即B) 不得變更。如~1.2.2,則安裝範圍是>=1.2.2<1.3.0。即須符合1.2.*

參考資料

stack overflow / What’s the difference between tilde(~) and caret(^) in package.json?
npmjs官方文件