前言:前幾天接到一個小任務,須要給一個老項目增長一個小功能。這原本是個簡單的活兒,可是因爲是老項目,我本地沒有,因而從倉庫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
指定版本:好比 "antd": "3.10.7"或"antd": "=3.10.7",表示安裝3.10.7的版本版本控制
~:好比 "antd": "~3.10.7",表示安裝3.10.x的最新版本(不低於3.10.7),可是不安裝3.11.x,也就是說安裝時不改變大版本號和次要版本號code
^:好比 "antd": "^3.10.7",表示安裝3.10.7及以上的版本,可是不安裝4.0.0,也就是說安裝時不改變大版本號。開發
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
也會同步更新。