package-lock.json的作用
說明
package-lock.json會爲npm修改node_modules樹或的任何操作自動生成package.json。
這是官方的說法
用一句簡單的話說,就是鎖定安裝時包的版本號,並要傳到git,以保證其他人在npm install時其他開發成員的依賴都能保證一致。
什麼是package-lock.json?
根據官方文檔,package-lock.json是在npm install時生成的一份文件,用以記錄當前狀態下實際安裝的每個npm package的具體信息,來源、版本號等。
這種代碼應該都不陌生吧
"axios": {
"version": "0.17.1",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.17.1.tgz/",
"integrity": "sha7hihiu2FI898u9jkhkjGfftas08=",
"requires": {
...
}
}
這就是package-lock.json裏面某個包的具體信息。
package-lock.json有什麼作用呢?
npm是一個用於管理package之間依賴關係的管理器,它允許開發者在package.json中間標出自己項目對npm每個包的依賴。你可以選擇標明自己所需要的包的版本號等。
npm最新的版本(5.0以上)就開始提供自動生成package-lock.json功能,爲了讓開發者知道只要保存了源文件,到一個新的機器上、或者新的下載源,只要按照這個package-lock.json所標示的具體版本下載依賴庫包,就能確保所有包與你上次安裝的完全一樣。
補充
package.json文件只能鎖定大版本,就是版本號第一位,並不能鎖定小版本,每次npm install都是拉取的該大版本下最新版本,爲了穩定考慮幾乎是不敢隨意升級包,有可能會導致多出來很多工作量,測試/適配等,所以package-lock.json文件出來了,當每次安裝一個依賴的時候就鎖定在你安裝的這個版本。
如果安裝的包有bug,後面需要更新怎麼辦?
在以前可能就是直接改package.json裏面的版本,再npm install,但是5版本就不支持這樣做了,因爲版本已經鎖在package-lock.json裏面了,所以只能npm install 包名@版本號,這樣更新依賴,然後package-lock.json會自動更新。