npm 語義版本控制

場景引入

開發時,常常須要依賴一些模塊(包),咱們進行了下載以後,便一直在該版本的模塊環境下進行開發,可是線上的服務器(其餘開發者)通常都是根據依賴來配置文件,從新下載各個模塊,可是保不齊某個模塊的版本已經更新了,這時線上的包會更新到最新的版本,但你的代碼仍是依據老版原本寫的,這時可能會產生一些不知名的 Bug。node

爲了保持 JavaScript 生態系統的健康,可靠和安全,npm 軟件包進行重大更新時,建議在 package.json 文件中發佈帶有更新版本號的軟件包的新版本,文件遵循語義版本規範。react

遵循語義版本規範能夠幫助依賴代碼的其餘開發人員瞭解給定版本中的更改範圍,並在必要時調整本身的代碼。git

關於語義版本控制

爲了幫助依賴你的代碼的開發人員,建議在 1.0.0 開始包版本並按以下方式遞增。npm 包的版本號的格式 x.y.z,版本好的格式遵循 semver 2.0 規範。npm

代碼狀態 階段 規則 示例版本
首發 新產品
New product
從1.0.0開始 1.0.0
向後兼容的錯誤修復 補丁發佈
Patch release
第三位數增長 1.0.1
向後兼容的新功能 次要發佈
Minor release
中間數字增長
並將最後一個數字重置爲零
1.1.0
破壞向後兼容性的更改 主要發佈
Major release
第一個數字增長
並將中間和最後一個數字重置爲零
2.0.0

版本規範識別

脫字符 ^

npm 經過脫字符(^)來限定所安裝模塊的主版本號,而該脫字符對於不一樣的版本號有不一樣的更新機制。json

  • ^1.2.1 更新版本範圍爲 >=1.2.1 && < 2.0.0;
  • ^0.2.1 更新版本範圍爲 >=0.2.1 && < 0.3.0;
  • ^0.0.1 更新版本範圍爲 0.0.2(至關於鎖定爲了 0.0.2 版本);

波浪號 ~

限定模塊的次要版本。緩存

  • ~1.2.1 更新版本範圍爲 >=1.2.1 && < 1.3.0;
  • ~0.2.1 更新版本範圍爲 0.3.0(至關於鎖定爲了 0.3.0 版本);
  • 當主版本號/次版本號/修訂版本號爲 X or x or * 時,那麼 updateinstall 是會下載該分支最新的版本號;

星號 *

跟新或安裝模塊時會安裝>=0.0.0的最新版本安全

  • 1.x 更新版本範圍爲 >=1.0.0&&< 2.0.0;
  • 1.2.x 更新版本範圍爲 >=1.2.0&&< 1.3.0;

更多

1.能夠把項目依賴的包固定在某一個版本,強制你們安裝相同的依賴樹服務器

npm install react --save -E
複製代碼

上面命令會將 react 的版本號進行固定,可是該方式只能控制項目中直接依賴的包的版本,沒法控制項目模塊中依賴的包的版本號,因此這種方式也沒法讓不一樣的使用者獲得相同的依賴樹。post

2.使用 npm shrinkwrap,能夠將項目中的模塊版本進行精確鎖定 運行命令 npm shrinkwrap,會產生一個 npm-shrinkwrap.json 文件,這個文件保存了全部當前使用的依賴模塊的版本。把該文件提交到 git 倉庫中,這樣其餘人在 clone 你的項目的時候,執行 npm install 命令時,npm 檢測到該文件中的信息會完整的還原出徹底相同的依賴樹。spa

npm install --save-dev react // 安裝react
npm prune    // 清除未被使用的模塊
npm shrinkwrap
複製代碼

注:這種方式,安裝一個模塊包的方式顯得有些比較繁瑣

3.使用 yarn 能夠獲得模塊包精確控制的結果 yarn 是一個與 npm 兼容的 node 包管理器,使用它安裝 npm 包,會自動在項目目錄建立一個yarn.lock 文件,該文件包含了當前項目中所安裝的依賴包的版本信息,其餘人在使用 yarn 安裝項目的依賴包時就能夠經過該文件建立一個徹底相同的依賴環境。

yarn init  //使用yarn建立一個項目
yarn add <package>  //使用yarn 安裝一個包
複製代碼

此外,yarn 除了能夠自動幫咱們鎖定依賴包的版本,yarn 還在本地緩存已經安裝過的包,當再次安裝時,直接從本地讀取便可。安裝速度獲得大大提高。但 yarn 的使用須要整個團隊都去使用,仍是有必定的成本的。

SemVer(Semantic Versioning) 2.0.0

SemVer 是一個對 npm 包版本進行規範的模塊,它對於 npm 包的版本號有着一系列的規則,如下爲部分 SemVer 2.0.0 中的規則。

  • 在版本控制環節咱們已經說過了,模塊的版本號採用 X.Y.Z 的格式,且都必須爲非負的正整數,依次爲主版本號、次版本號,修改版本號;
  • 當規定版本的模塊進行發佈以後,對於該模塊的任何修改,都必須發佈新版本;
  • 主版本號爲 0.X.Y 的模塊處於開發階段,模塊並不穩定;
  • 主版本號在有不向下兼容的 API 發佈時必須修改,在主版本號遞增時,次版本號和修訂版本號必須從新歸零;
  • 次版本號再有向下兼容的 API 發佈時進行遞增修改,在模塊中有 API 被棄用時也必須遞增次版本號,當此版本號遞增改變時,修訂版本號 Z 必須歸零;
  • 版本的優先級就是各個版本的排序規則,判斷版本優先級時,必須把版本號從左至右分爲主版本號、此版本號、修訂版本號、以及先行版本號來進行比較;

你能夠...

上一篇:npm 經常使用命令(便於查找,提升開發效率)

相關文章
相關標籤/搜索