npm中package-lock.js 的作用的理解


npm中package-lock.js 的作用的理解:

簡單理解: XYZ 的格式
對應為: 主版本號.次版本號.修訂號,
版本號遞增規則如下:主版本號:當你做了不兼容的 API 修改,次版本號:當你做了向下兼容的功能性新增,修訂號:當你做了向下兼容的問題修正。假設我們創建了一個新項目,它將使用express。 在運行npm init之后,在撰寫本項目時,最新的express版本是4.15.4。 (默認情況下,npm 將安裝最新版本)
因此在package.json中,"express":"^ 4.15.4"被添加作為依賴項。 假設明天,express的維護者會發布一個 bug 修復,所以最新版本變成了4.15.5。 然后,如果有人想要為我的項目做貢獻,他們會克隆它,然后運行 npm install, 因為4.15.5是一個更高版本的主要版本,這是為他們安裝的。 我們都有express依賴,但我們有兩個不同的版本。 理論上,它們應該還是兼容的,但是也許這個 bug 會影響我們正在使用的功能,而我們的應用程序在使用Express版本4.15.4與4.15.5進行比較時會產生不同的結果.
而package-lock.json的作用就是用來保證我們的應用程序依賴之間的關系是一致的, 兼容的.
 當不存在package-lock.json文件時,使用npm install時,會自動生成這個文件。當存在這個文件時,使用npm install安裝,會安裝package-lock.json里指定版本的插件,而且相比沒有package-lock.json文件時,安裝速度會快很多。因為package-lock.json文件里已經存在插件的版本、下載地址、整個node_modules的結構等信息。
當存在package-lock.json文件時,每次npm install安裝就會安裝package-lock.json里對應插件的版本。這樣同一份package-lock.json文件,大家安裝的插件版本一致。
如果某個插件版本變更。又不想刪除package-lock.json文件,重新生成。方法是:npm install plugin@version,及重新安裝這個插件,並指定插件的版本,這樣,package.json和package-lock.json會自動更新。當然,也可以直接修改package-lock.json文件,這樣npm install時,也會安裝修改后的版本。但是如果只修改package.json,不修改package-lock.json,npm install還是會安裝package-lock.json里的插件版本。

來自 <http://www.cnblogs.com/shengulong/p/9463176.html>
其實用一句話來概括很簡單,就是鎖定安裝時的包的版本號,並且需要上傳到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文件出來了,當你每次安裝一個依賴的時候就鎖定在你安裝的這個版本。
那如果我們安裝時的包有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一下才對。

來自 <https://www.cnblogs.com/cangqinglang/p/8336754.html>

 


免責聲明!

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



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