package.json在npm中實際用途參考:npm基本使用這篇文章恰聘,接下來主要講解package-lock.json
用途以及與package.json
的不同
npm 5以前沒有package-lock.json
這個文件,需要保存依賴信息,每次安裝時都要加上--save
參數(shù);npm5以后版本加入了package-lock.json
文件。當(dāng)安裝包的時候浓体,不需要加上--save
參數(shù),它會自動保存依賴信息,且會生成或更新package-lock.json
這個文件亚情。
而package-lock.json
出現(xiàn)有啥用途呢?
當(dāng)我們需要下載某一個包的時候哈雏,比如:npm install art-template
楞件,實際上不止下載了art-template
一個包,還會下載art-template
包的依賴包裳瘪,以及其依賴包所依賴的各種包土浸。查看art-template的package.json
文件可以看到art-template的依賴包:
所以當(dāng)我們刪除node_modules
時,想要使用npm install
通過package.json
文件恢復(fù)項目中所使用的相關(guān)的包時彭羹,整體工作流程是:查詢package.json
文件中要下載的包的下載地址黄伊,并下載,然后從當(dāng)前下載后的包的package.json
文件去查詢還需要下載的依賴包皆怕,根據(jù)依賴包的地址再去下載依賴包毅舆。而這個查找的過程在有很多依賴包的情況下,下載的速度會明顯下降愈腾,而此時憋活,package-lock.json
就派上了用途,這個文件保存了node_modules
中所有的包(包括當(dāng)前下載的包以及依賴包)的信息:版本虱黄、下載地址(這個信息在一開始第一次安裝包時就寫入了package-lock.json
文件中)悦即。這樣當(dāng)npm install
的時候直接從當(dāng)前文件根據(jù)下載地址直接下載,而不再每次都先下載當(dāng)前的包,再查詢當(dāng)前包的package.json
文件再去下載辜梳。從而下載速度大大提升粱甫。
我們再來看一種情況:在實際項目開發(fā)過程中,并不是最新版本的包是適合于當(dāng)前項目的創(chuàng)建的作瞄,因此如果一個項目依賴了1.1.1
版本茶宵,當(dāng)你重新npm install
的時候其實會下載最新版本,也不是1.1.1
宗挥,也這也并不是我們想要的結(jié)果乌庶,而我們的目的主要想要鎖住1.1.1
這個版本,而package-lock.json
這個文件在這個時候開始起作用契耿,其可以鎖定版本號瞒大,防止自動升級新版本,也就是說在package-lock.json
中配置的版本號如果低于最新版本號搪桂,但是在npm install
的時候也不會升級版本號透敌,從而讓package-lock.json
文件名中的lock
名副其實。
總結(jié):
package.json
記錄的是當(dāng)前項目中你下載了哪些包(也即npm install xx
的包信息)踢械,記錄了你下載的包信息(地址酗电、版本號等),不包含依賴包信息裸燎。
package-lock.json
文件記錄的是當(dāng)前項目中你下載了哪些包以及你下載的這些包的各種依賴包信息顾瞻,包括地址、版本號等德绿。主要作用有以下兩點:
- 當(dāng)刪除node_module目錄時荷荤,想通過
npm install
恢復(fù)所有包時,提升下載速度移稳。 - 鎖定版本號蕴纳,防止自動升級新版本