如果項目中只有package.json
二鳄,那么第一次install會生成一個package-lock.json
的文件
那么生成的package-lock.json
中的依賴版本和package.json
中的一定會一致嗎?
答案是否定的
如果
包A
在遠程中是1.0.2
, 而在package.json
中是1.0.0
榕堰,那么在第一次生成的package-lock.json
文件中渊迁,依賴版本也是1.0.2
-
測試如下
1、在遠程準備了一個npm-test-lxy
的包富腊,并發(fā)了三個小版本1.0.0
、1.0.1
域帐、1.0.2
2赘被、本地package.json文件中寫死1.0.0
3是整、執(zhí)行 npm install 發(fā)現(xiàn)生成的lock文件和實際下載到node_modules的是最新版本
但實際項目開發(fā),lock文件肯定是上傳到git倉庫上的民假,每個開發(fā)人員的項目初始會有這個文件浮入,并且保持一直
那么當lock文件和package.json不一致,且lock中的版本不是最新版本羊异,npm install 會根據(jù)lock中的版本下載還是根據(jù)package.json下載事秀,還是會下載最新版本并更新到lock里呢
-
帶著這樣的疑問,開始第二個試驗
執(zhí)行 npm install 之后 node_modules里面下載的包的版本是
1.0.1
那么我手動更改package.json中的包的版本野舶,會怎樣呢
-
再次install易迹,結(jié)果如下
結(jié)論
- 如果lock文件中的版本高于package.json, 項目每次 install 都會根據(jù) lock文件 的具體版本去拉取包平道,但并不會更新package.json中寫的版本號
- 如果lock文件中的版本低于package.json睹欲,項目install的時候會下載當前包大版本下的最新小版本,并更新lock
- 等于的情況一屋,就是下載當前版本號的依賴