package-lock.json的做用

其實用一句話來歸納很簡單,就是鎖定安裝時的包的版本號,而且須要上傳到git,以保證其餘人在npm install時你們的依賴能保證一致。node

 

引用知乎@周載南的回答jquery

根據官方文檔,這個package-lock.json 是在 `npm install`時候生成一份文件,用以記錄當前狀態下實際安裝的各個npm package的具體來源和版本號。git

它有什麼用呢?由於npm是一個用於管理package之間依賴關係的管理器,它容許開發者在pacakge.json中間標出本身項目對npm各庫包的依賴。你能夠選擇以以下方式來標明本身所須要庫包的版本npm

這裏舉個例子:json

"dependencies": {
 "@types/node": "^8.0.33",
},測試

這裏面的 向上標號^是定義了向後(新)兼容依賴,指若是 types/node的版本是超過8.0.33,並在大版本號(8)上相同,就容許下載最新版本的 types/node庫包,例如實際上可能運行npm install時候下載的具體版本是8.0.35。波浪號接口

大多數狀況這種向新兼容依賴下載最新庫包的時候都沒有問題,但是由於npm是開源世界,各庫包的版本語義可能並不相同,有的庫包開發者並不遵照嚴格這一原則:相同大版本號的同一個庫包,其接口符合兼容要求。這時候用戶就很頭疼了:在徹底相同的一個nodejs的代碼庫,在不一樣時間或者不一樣npm下載源之下,下到的各依賴庫包版本可能有所不一樣,所以其依賴庫包行爲特徵也不一樣有時候甚至徹底不兼容。ci

所以npm最新的版本就開始提供自動生成package-lock.json功能,爲的是讓開發者知道只要你保存了源文件,到一個新的機器上、或者新的下載源,只要按照這個package-lock.json所標示的具體版本下載依賴庫包,就能確保全部庫包與你上次安裝的徹底同樣。開發

 

原來package.json文件只能鎖定大版本,也就是版本號的第一位,並不能鎖定後面的小版本,你每次npm install都是拉取的該大版本下的最新的版本,爲了穩定性考慮咱們幾乎是不敢隨意升級依賴包的,這將致使多出來不少工做量,測試/適配等,因此package-lock.json文件出來了,當你每次安裝一個依賴的時候就鎖定在你安裝的這個版本。文檔

那若是咱們安裝時的包有bug,後面須要更新怎麼辦?

 

在之前可能就是直接改package.json裏面的版本,而後再npm install了,可是5版本後就不支持這樣作了,由於版本已經鎖定在package-lock.json裏了,因此咱們只能npm install xxx@x.x.x  這樣去更新咱們的依賴,而後package-lock.json也能隨之更新。

 

假如我已經安裝了jquery 2.1.4這個版本,從git更新了package.json和package-lock.json,我npm install能覆蓋掉node_modules裏面的依賴嗎?

 

其實我也有這個疑問,因此作了測試,在直接更新package.json和package-loc.json這兩個文件後,npm install是能夠直接覆蓋掉原先的版本的,因此在協做開發時,這兩個文件若是有更新,你的開發環境應該npm install一下才對。

相關文章
相關標籤/搜索