package.json和package-lock.json

前言:前幾天接到一個小任務,須要給一個老項目增長一個小功能。這原本是個簡單的活兒,可是因爲是老項目,我本地沒有,因而從倉庫clone下來,一頓操做以後,npm start卻跑不起來,報的錯是依賴的版本有問題,因而開始了漫長的踩坑之路。node

  • 首先是刪除node_modules從新npm install,這彷佛跟重啓同樣好用,但仍是報錯,卒
  • 而後固定依賴的版本,仍然報錯,原來是第三方依賴中引用的依賴版本有問題,卒
  • 經過問老大,查資料等方式瞭解到package-lock.json文件能夠控制版本,可是倉庫裏並無這個文件,好在同事有,滿心歡喜再次npm install,成功!!!

其實還有個小插曲,我以前一直用的cnpm,因此並不會根據package-lock.json安裝依賴,查閱資料後決定棄用cnpm,配置鏡像後再次啓用npm。建議你們仍是使用官方的npm,配置鏡像以後速度也還能夠接受,第三方的可能會不少坑。npm

雖然看起來好像沒多少技術含量,可是一開始因爲思考的方向有點誤差,致使浪費了不少時間。仔細衡量了下仍是記錄下來。如下是一些筆記:json

版本控制規則

a.b.c:a表示主版本號,b表示次版本號,c表示補丁更新。當你只是簡單的修復了bug, 當沒有添加任何新功能,或者修改舊功能時, 就更新補丁號;當添加了新的功能, 但沒有破壞原有的功能,就更新次版本號;當作了重大修改,致使新版本不兼容舊代碼時,就更新主版本號。antd

package.json版本控制

  1. 指定版本:好比 "antd": "3.10.7"或"antd": "=3.10.7",表示安裝3.10.7的版本版本控制

  2. ~:好比 "antd": "~3.10.7",表示安裝3.10.x的最新版本(不低於3.10.7),可是不安裝3.11.x,也就是說安裝時不改變大版本號和次要版本號code

  3. ^:好比 "antd": "^3.10.7",表示安裝3.10.7及以上的版本,可是不安裝4.0.0,也就是說安裝時不改變大版本號。開發

package-lock.json

package-lock.json的做用就是用來保證咱們的應用程序依賴之間的關係是一致的,兼容的;適合多人協做開發時保證每一個人的依賴版本是一致的同步

當項目中不存在package-lock.json文件時,使用npm install時會自動生成這個文件。當package-lock.json存在時,則會安裝文件中指定版本的依賴,而且安裝速度會比不存在此文件時快不少。由於package-lock.json中已經存在依賴的版本,下載地址和整個node_modules的文件結構等信息。class

使用yarn一樣也會自動生成package-lock.json文件,可是cnpm不會自動生成,而且也不會讀取package-lock.json文件,只根據package.json下載依賴。module

更新依賴

在npm 5.x以前,咱們能夠直接更改package.json中的版本號,再npm install就能夠直接更新了,可是5.x以後因爲是根據package-lock.json安裝依賴,因此咱們只能使用npm install xxx@x.x.x去更新依賴,這樣package-lock.json也會同步更新。

相關文章
相關標籤/搜索