簡單理解: XYZ 的格式node
對應爲: 主版本號.次版本號.修訂號,版本號遞增規則以下:express
主版本號:當你作了不兼容的 API 修改,npm
次版本號:當你作了向下兼容的功能性新增,json
修訂號:當你作了向下兼容的問題修正。插件
假設咱們建立了一個新項目,它將使用express。 在運行npm init以後,在撰寫本項目時,最新的express版本是4.15.4。 (默認狀況下,npm 將安裝最新版本)it
所以在package.json中,"express":"^ 4.15.4"被添加做爲依賴項。 假設明天,express的維護者會發佈一個 bug 修復,因此最新版本變成了4.15.5。 而後,若是有人想要爲個人項目作貢獻,他們會克隆它,而後運行 npm install, 由於4.15.5是一個更高版本的主要版本,這是爲他們安裝的。 咱們都有express依賴,但咱們有兩個不一樣的版本。 理論上,它們應該仍是兼容的,可是也許這個 bug 會影響咱們正在使用的功能,而咱們的應用程序在使用Express版本4.15.4與4.15.5進行比較時會產生不一樣的結果.io
而package-lock.json的做用就是用來保證咱們的應用程序依賴之間的關係是一致的, 兼容的.module
當不存在package-lock.json文件時,使用npm install時,會自動生成這個文件。當存在這個文件時,使用npm install安裝,會安裝package-lock.json裏指定版本的插件,並且相比沒有package-lock.json文件時,安裝速度會快不少。由於package-lock.json文件裏已經存在插件的版本、下載地址、整個node_modules的結構等信息。plugin
當存在package-lock.json文件時,每次npm install安裝就會安裝package-lock.json裏對應插件的版本。這樣同一份package-lock.json文件,你們安裝的插件版本一致。下載
若是某個插件版本變動。又不想刪除package-lock.json文件,從新生成。方法是:npm install plugin@version,及從新安裝這個插件,並指定插件的版本,這樣,package.json和package-lock.json會自動更新。固然,也能夠直接修改package-lock.json文件,這樣npm install時,也會安裝修改後的版本。可是若是隻修改package.json,不修改package-lock.json,npm install仍是會安裝package-lock.json裏的插件版本。