1. 程式人生 > >package-lock.json和package.json的作用

package-lock.json和package.json的作用

狀態 保持 可能 管理器 例如 ejs 方式 超過 一個

轉自:https://www.cnblogs.com/cangqinglang/p/8336754.html

package-lock.json的作用就是鎖定安裝依賴時包的版本,並且需要上傳到git,以保證其他人npm install時安裝的依賴能夠保持一致

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

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

這裏舉個例子:

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

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

大多數情況這種向新兼容依賴下載最新庫包的時候都沒有問題,可是因為npm是開源世界,各庫包的版本語義可能並不相同,有的庫包開發者並不遵守嚴格這一原則:相同大版本號的同一個庫包,其接口符合兼容要求。這時候用戶就很頭疼了:在完全相同的一個nodejs的代碼庫,在不同時間或者不同npm下載源之下,下到的各依賴庫包版本可能有所不同

,因此其依賴庫包行為特征也不同有時候甚至完全不兼容。

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

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

package-lock.json和package.json的作用