package-lock.json 有何作用,如果沒有會出現什么問題


package-lock.json的作用

用一句話來概括很簡單,就是鎖定安裝時的包的版本號,並且需要上傳到git,以保證其他人在npm install時大家的依賴能保證一致。

 

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

它有什么用呢?因為npm是一個用於管理package之間依賴關系的管理器,它允許開發者在pacakge.json中間標出自己項目對npm各庫包的依賴。你可以選擇以如下方式來標明自己所需要庫包的版本

這里舉個例子:

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

 

~和^的區別

  • ~會匹配最近的小版本依賴包,比如~1.2.3會匹配所有1.2.x版本,但是不包括1.3.0
  • ^會匹配最新的大版本依賴包,比如^1.2.3會匹配所有1.x.x的包,包括1.3.0,但是不包括2.0.0
那么該如何選擇呢?當然你可以指定特定的版本號,直接寫1.2.3,前面什么前綴都沒有,這樣固然沒問題,但是如果依賴包發布新版本修復了一些小bug,那么需要手動修改 package.json文件; ~^則可以解決這個問題。

但是需要注意^版本更新可能比較大,會造成項目代碼錯誤,所以建議使用~來標記版本號,這樣可以保證項目不會出現大的問題,也能保證包中的小bug可以得到修復。

版本號寫*,這意味着安裝最新版本的依賴包,但缺點同上,可能會造成版本不兼容,慎用

總結

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一下才對。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM