開發時,常常須要依賴一些模塊(包),咱們進行了下載以後,便一直在該版本的模塊環境下進行開發,可是線上的服務器(其餘開發者)通常都是根據依賴來配置文件,從新下載各個模塊,可是保不齊某個模塊的版本已經更新了,這時線上的包會更新到最新的版本,但你的代碼仍是依據老版原本寫的,這時可能會產生一些不知名的 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 *
時,那麼 update
或 install
是會下載該分支最新的版本號;*
跟新或安裝模塊時會安裝>=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 是一個對 npm 包版本進行規範的模塊,它對於 npm 包的版本號有着一系列的規則,如下爲部分 SemVer 2.0.0 中的規則。
X.Y.Z
的格式,且都必須爲非負的正整數,依次爲主版本號、次版本號,修改版本號;0.X.Y
的模塊處於開發階段,模塊並不穩定;