如果項(xiàng)目中只有package.json,那么第一次install會(huì)生成一個(gè)package-lock.json的文件
那么生成的package-lock.json中的依賴版本和package.json中的一定會(huì)一致嗎?
答案是否定的
如果
包A在遠(yuǎn)程中是1.0.2, 而在package.json中是1.0.0,那么在第一次生成的package-lock.json文件中,依賴版本也是1.0.2-
測(cè)試如下
1、在遠(yuǎn)程準(zhǔn)備了一個(gè)npm-test-lxy的包,并發(fā)了三個(gè)小版本1.0.0、1.0.1、1.0.2
遠(yuǎn)程.jpg
2、本地package.json文件中寫死1.0.0
本地package.jpg
3、執(zhí)行 npm install 發(fā)現(xiàn)生成的lock文件和實(shí)際下載到node_modules的是最新版本
測(cè)試結(jié)果.jpg 但實(shí)際項(xiàng)目開發(fā),lock文件肯定是上傳到git倉庫上的,每個(gè)開發(fā)人員的項(xiàng)目初始會(huì)有這個(gè)文件,并且保持一直
那么當(dāng)lock文件和package.json不一致,且lock中的版本不是最新版本,npm install 會(huì)根據(jù)lock中的版本下載還是根據(jù)package.json下載,還是會(huì)下載最新版本并更新到lock里呢
-
帶著這樣的疑問,開始第二個(gè)試驗(yàn)
1.jpg 執(zhí)行 npm install 之后 node_modules里面下載的包的版本是
1.0.1
那么我手動(dòng)更改package.json中的包的版本,會(huì)怎樣呢

2.jpg
-
再次install,結(jié)果如下
3.jpg
結(jié)論
- 如果lock文件中的版本高于package.json, 項(xiàng)目每次 install 都會(huì)根據(jù) lock文件 的具體版本去拉取包,但并不會(huì)更新package.json中寫的版本號(hào)
- 如果lock文件中的版本低于package.json,項(xiàng)目install的時(shí)候會(huì)下載當(dāng)前包大版本下的最新小版本,并更新lock
- 等于的情況,就是下載當(dāng)前版本號(hào)的依賴




