秒懂NPM依賴包版本號 和 的區別

2021-10-05 03:34:37 字數 935 閱讀 5017

你是不是也和我一樣,總忘記~和^的區別?(哈哈,或者你壓根就不知道?)

今天盯著semver的api看了很久(?原始碼就不看了,真是的又長又醜),感覺是看到它的規律了。

我們常見的大概有這些:

以上的大概可以覆蓋我們常見的一些情況了,下面分析一下semver是怎麼判斷的。

1、首先我們把版本分為a、b、c、xx四個位置: a-b-c-xx

2、最小範圍不管是「~***」還是「^***」都是》=***

3、最大範圍

如果為「~」:取a、b位,a、b位都有的時候直接b位+1,如「~1.1.0」取「1.(1+1).0」, 只有a位的時候「a位+1」,如「~1」取:「 (1+1).0.0」

如果為「^」: 直接從右到左去除無效的0然後看成乙個數字,最大位數+1就可以了

比如1.0.0可以看成100,也就是2.0.0

0.1.1看成11, 也就是0.(1+1).0

0.1.0看成10,也就是0.(1+1).0

0.0.0看成0, 也就是0 .0.(0+1)

以下是我的測試**:

const semver =

require

("semver");

const data =

"^3.1.4"

;const result =

">=3.1.4 <4.0.0"

;const validrange = semver.

validrange

(data)

;console.

assert

(validrange===result)

;

還沒看原始碼的,不過規則應該差不多吧,如果描述有誤還麻煩小夥伴告知一聲,歡迎志同道合的小夥伴一起學習,一起交流,一起進步,歡迎入群!

NPM依賴包版本號 和 的區別及最佳實踐

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!你會發現很多專案的依賴包版本號前面會加上 或者是 以angular2為例 那麼 和 的作用和區別是什麼呢?詳細可參考 那麼該如何選擇呢?當然你可以指定特定的版本號,直接寫1.2.3,前面什麼字首都沒有,這樣固然沒問題,但是如果依賴包發布新版本修復了...

NPM依賴包版本號 和 的區別及最佳實踐

你會發現很多專案的依賴包版本號前面會加上 或者是 以angular2為例 那麼 和 的作用和區別是什麼呢?詳細可參考 那麼該如何選擇呢?當然你可以指定特定的版本號,直接寫1.2.3,前面什麼字首都沒有,這樣固然沒問題,但是如果依賴包發布新版本修復了一些小bug,那麼需要手動修改package.jso...

NPM依賴包版本號 和 的區別及最佳實踐

你會發現很多專案的依賴包版本號前面會加上 或者是 以angular2為例 會匹配最近的小版本依賴包,比如1.2.3會匹配所有1.2.x版本,但是不包括1.3.0 會匹配最新的大版本依賴包,比如1.2.3會匹配所有1.x.x的包,包括1.3.0,但是不包括2.0.0 詳細可參考 那麼該如何選擇呢?當然...