package.json 這個文件是 npm init 時創建的一個文件,會記錄當前整個項目中的一些基礎信息。而 package-lock.json 這個文件卻是 node_modules 文件夾或者 package.json 文件發生變化時自動生成的。這個文件主要功能是確定當前安裝的包的依賴,以便后續重新安裝的時候生成相同的依賴,而忽略項目開發過程中有些依賴已經發生的更新。
自npm 5.0版本發布以來,npm i的規則發生了三次變化。
1、npm 5.0.x 版本,不管package.json怎么變,npm i 時都會根據lock文件下載
package-lock.json file not updated after package.json file is changed · Issue #16866 · npm/npm
這個 issue 控訴了這個問題,明明手動改了package.json,為啥不給我升級包!然后就導致了5.1.0的問題...
2、5.1.0版本后 npm install 會無視lock文件 去下載最新的npm
why is package-lock being ignored? · Issue #17979 · npm/npm
這個issue控訴這個問題,最后演變成5.4.2版本后的規則。
3、5.4.2版本后 why is package-lock being ignored? · Issue #17979 · npm/npm
大致意思是,如果改了package.json,且package.json和lock文件不同,那么執行`npm i`時npm會根據package中的版本號以及語義含義去下載最新的包,並更新至lock。
如果兩者是同一狀態,那么執行`npm i `都會根據lock下載,不會理會package實際包的版本是否有新。
(本文是轉載別處的文章,至於原文出處並沒有找。。。)
