1. 程式人生 > >關於package.json和package-lock.json的區別

關於package.json和package-lock.json的區別

5.0以後的node.js,在安裝專案的時候,會產生package-lock.json檔案。這個package-lock.json檔案,與之前的package.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 [email protected](指定版本號)來進行安裝才會更新,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檔案。該檔案記錄了上一次安裝的具體的版本號,相當於是提供了一個參考,在出現版本相容性問題的時候,就可以參考這個檔案來修改版本號即可。