package-lock.json的作用
1、概述:
其實用一句話來概括很簡單,就是鎖定安裝時的包的版本號,並且需要上傳到git,以保證其他人在npm install時大家的依賴能保證一致。
2、別人的分析:
根據官方文件,這個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檔案出來了,當你每次安裝一個依賴的時候就鎖定在你安裝的這個版本。
1、 那如果我們安裝時的包有bug,後面需要更新怎麼辦?
在以前可能就是直接改package.json裡面的版本,然後再npm install了,但是5版本後就不支援這樣做了,因為版本已經鎖定在package-lock.json裡了,所以我們只能npm install xxx@x.x.x 這樣去更新我們的依賴,然後package-lock.json也能隨之更新。
2、 假如我已經安裝了jquery 2.1.4這個版本,從git更新了package.json和package-lock.json,我npm install能覆蓋掉node_modules裡面的依賴嗎?
其實我也有這個疑問,所以做了測試,在直接更新package.json和package-loc.json這兩個檔案後,npm install是可以直接覆蓋掉原先的版本的,所以在協作開發時,這兩個檔案如果有更新,你的開發環境應該npm install一下才對。
相關文章
- 如何與NPM package-lock.json愉快地玩耍NPMPackageJSON
- 【譯】關於你想知道的package-lock.json的一切PackageJSON
- js的作用域、作用域鏈JS
- js的作用域和作用域鏈JS
- js的作用域與作用域鏈JS
- Java中的volatile的作用和synchronized作用Javasynchronized
- Symbol 的作用Symbol
- jQuery $ 的作用jQuery
- #include的作用
- Spring的作用域以及RequestContextListener作用SpringContext
- 60%的人都不知道 package-lock.json 有啥用吧?簡單講講PackageJSON
- http 代理的作用HTTP
- JS的作用域JS
- Hashcode的作用
- Git分支的作用Git
- condition的作用
- 作用域的理解
- source命令的作用
- spring的作用Spring
- Oracle Undo的作用Oracle
- SMON 程式的作用
- __declspec(dllimport)的作用Import
- cookie的作用域Cookie
- SSH Agent 的作用
- noEmit 的作用是?MIT
- Kafka——zookeeper的作用Kafka
- ContentPresenter 的作用
- oracle的undo的作用Oracle
- Vue中key的作用Vue
- Symbol 的作用[翻譯]Symbol
- JAVA中initCause()的作用Java
- mock.js 的作用MockJS
- Token 的作用和原理
- 伺服器的作用伺服器
- C++中::的作用C++
- JavaScript return false的作用JavaScriptFalse
- css中!important的作用CSSImport
- targetFilterLifecycle的作用Filter