闡述vue項目中package.json與package-lock.json作用及區別


                                

  我們每次新建一個項目的時候會發現在項目中會有這么倆個相似的文件,並且一個里邊東西很多一個里邊的東西很簡潔,那么他們到底有什么區別與聯系。

  npm5之前的版本,是不會生成package-lock.json這個文件的。npm5版本及以后,才會生成package-lock.json文件;當使用npm安裝包的時候,npm都會生成或者更新package-lock.json文件,npm5版本及以后的版本,在安裝包的時候,不需要加 --save(-s) 參數,也會自動在package.json中保存依賴項,當安裝包的時候,會自動創建或者更新package-lock.json文件。

  package-lock.json文件內保存了 node_modules中所有包的信息,包含着這些包的名稱、版本號、下載地址。這樣帶來好處是,如果重新 npm install 的時候,就無需逐個分析包的依賴項,因此會大大加快安裝速度。

  package-lock.json文件,lock代表的是“鎖定”的意思。用來鎖定當前開發使用的版本號,防止npm install的時候自動更新到了更新版本。因為新版本可能替換掉老的api,導致之前的代碼報錯。

  package.json 文件只能鎖定大版本,也就是版本號的第一位,並不能鎖定后面的小版本,你每次npm install都是拉取的該大版本下的最新的版本,為了穩定性考慮我們幾乎是不敢隨意升級依賴包的,這將導致多出來很多工作量,測試/適配等,這個時候package-lock.json文件應運而生,所以當你每次安裝一個依賴的時候就鎖定在你安裝的這個版本。

  package.json文件記錄你項目中所需要的所有模塊。當你執行npm install的時候,node會先從package.json文件中讀取所有dependencies信息,然后根據dependencies中的信息與node_modules中的模塊進行對比,沒有的直接下載,已有的檢查更新(最新版本的nodejs不會更新,因為有package-lock.json文件,下面再說)。另外,package.json文件只記錄你通過npm install方式安裝的模塊信息,而這些模塊所依賴的其他子模塊的信息不會記錄。

  package-lock.json文件鎖定所有模塊的版本號,包括主模塊和所有依賴子模塊。當你執行npm install的時候,node從package.json文件讀取模塊名稱,從package-lock.json文件中獲取版本號,然后進行下載或者更新。因此,正因為有了package-lock.json文件鎖定版本號,所以當你執行npm install的時候,node不會自動更新package.json文件中的模塊,必須用npm install packagename(自動更新小版本號)或者npm install packagename@x.x.x(指定版本號)來進行安裝才會更新,package-lock.json文件中的版本號也會隨着更新。

  順便說一下:當package.json與package-lock.json都不存在,執行"npm install"時,node會重新生成package-lock.json文件,然后把node_modules中的模塊信息全部記入package-lock.json文件,但不會生成package.json文件,此時,你可以通過"npm init --yes"來初始化生成package.json文件。

  總結:

  項目中引入的包版本號之前經常會加^號,每次在執行npm install之后,下載的包都會發生變化,為了系統的穩定性考慮,每次執行完npm install之后會創建或者更新package-lock文件。該文件記錄了上一次安裝的具體的版本號,相當於是提供了一個參考,在出現版本兼容性問題的時候,就可以參考這個文件來修改版本號即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM