您好,登錄后才能下訂單哦!
這篇文章主要介紹了package.json與package-lock.json的區別是什么的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇package.json與package-lock.json的區別是什么文章都會有所收獲,下面我們一起來看看吧。
記錄當前項目所依賴模塊的版本信息,更新模塊時鎖定模塊的大版本號(版本號的第一位),不能鎖定后面的小版本,
package-lock.json 是在 `npm install`時候生成一份文件。記錄了node_modules目錄下所有模塊(包)的名稱、版本號、下載地址、及這個模塊又依賴了哪些依賴。
npm5以前
npm5以前,沒有package-lock.json這個文件。package.json文件會記錄你項目中所需要的所有模塊。當你執行npm install的時候,node會先從package.json文件中讀取所有dependencies信息,然后根據dependencies中的信息與node_modules中的模塊進行對比,沒有的直接下載,已有的檢查更新。
因為package.json只能鎖定模塊的大版本號(版本號的第一位),不能鎖定后面的小版本,所以你每次重新npm install時候拉取的都是該大版本下面最新的版本。一般我們為了穩定性考慮我們不能隨意升級依賴包,因為如果換包導致兼容性bug出現很難排查,這樣很容易出現問題,所以package-lock.json就是來解決包鎖定不升級問題的
另外,package.json文件只記錄你通過npm install方式安裝的模塊信息,而這些模塊所依賴的其他子模塊的信息不會記錄。
npm5以后
package-lock.json文件鎖定所有模塊的版本號,包括主模塊和所有依賴子模塊。當你執行npm install的時候,node從package.json文件讀取模塊名稱,從package-lock.json文件中獲取版本號,然后進行下載或者更新。
因此,正因為有了package-lock.json文件鎖定版本號,所以當你執行npm install的時候,node不會自動更新package.json文件中的模塊,必須用npm install packagename@x.x.x(指定版本號)來進行安裝才會更新,package-lock.json文件中的版本號也會隨著更新。
如果重新 npm install 的時候以及當node_modules文件夾并不存在或被刪除時,需要用到npm install重新裝載全部依賴時,通過package-lock.json可以直接表明下載地址和相關依賴,就無需再從package.json逐個分析包的依賴項,因此會大大加快安裝速度,package-lock.json目的就是確保所有庫包與你上次安裝的完全一樣。
如果要升級package-lock.json里面的庫包
npm install XXX@x.x.x
Node.js v8.0 后,自帶的 npm 也升級到了5.0的確帶來了不少便利,大概講一下 npm 5 的一些大的變化:
使用npm install xxx命令安裝模塊時,不再需要–save選項,會自動將模塊依賴信息保存到 package.json 文件;
安裝模塊操作(改變 node_modules 文件夾內容)會生成或更新 package-lock.json 文件;
發布的模塊不會包含 package-lock.json 文件;
如果手動修改了 package.json 文件中已有模塊的版本,直接執行npm install不會安裝新指定的版本,只能通過npm install xxx@yy更新
重新安裝模塊之所以快,是因為 package-lock.json 文件中已經記錄了整個 node_modules 文件夾的樹狀結構,甚至連模塊的下載地址都記錄了,再重新安裝的時候只需要直接下載文件即可(這樣看起來 facebook 的 yarn 好像沒有啥優勢了);
package-lock.json文件的產生:
package.json文件下載到的依賴包可能在不同的情況下,各庫包的版本語義可能并不相同,有的庫包開發者并不嚴格遵守這一原則:相同大版本號的同一個庫包,其接口符合兼容要求。
產生問題:在不同時間或者不同npm下載源之下,下載的各依賴包版本可能有所不同,因此其依賴庫包行為特征也不同,有時候甚至完全不兼容。
npm5開始提供自動生成package-lock.json文件的功能,為的是讓開發者知道只要你保存了源文件,到一個新的機器上、或者新的下載源,只要按照這個package-lock.json文件所標識的具體版本下載依賴庫包,就能確保所有庫包與上次的安裝完全一樣;
npm的下載源改為私服地址,這樣產生的package-lock.json文件的版本號是這個私服上設置好的版本號
以下是 package-lock.json 文件的例子:
package-lock.json
是當 node_modules 或 package.json發生變化時自動生成的文件。這個文件主要功能是確定當前安裝的包的依賴,以便后續重新安裝的時候生成相同的依賴,而忽略項目開發過程中有些依賴已經發生的更新
{ "name": "test_pkg_lock", "version": "1.0.0", "lockfileVersion": 1, "dependencies": { "commander": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=" }, "cssfilter": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.8.tgz", "integrity": "sha1-ZWTKzLqKdt2bS5IGaLn7f9pQ5Uw=" }, "graceful-readlink": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" }, "xss": { "version": "0.2.18", "resolved": "https://registry.npmjs.org/xss/-/xss-0.2.18.tgz", "integrity": "sha1-bfX7XKKL3FHnhiT/Y/GeE+vXO6s=" } }}
帶來速度的同時,npm 也挖了個大大的坑:
以后直接改 package.json 文件相應模塊的版本號,再執行npm install不會更新了(好可怕),你只能手動用npm install xxx@yy指定版本號來安裝,然后它會自動更新 package-lock.json 文件。直接執行npm install時,如果不存在 package-lock.json 文件,它會根據安裝模塊后的 node_modules 目錄結構來創建;如果已經存在 package-lock.json 文件,則它只會根據 package-lock.json 文件指定的結構來下載模塊,并不會理會 package.json 文件
網上已經有很多人反應這個問題了:GitHub 上的 issue:package-lock.json file not updated after package.json file is changed
clean project with some deps in package.json.you run npm imodules are
installed and package-lock.json file is created.say you update module
A in package.json file.you run npm i. I would expect this updates the
package-lock.json file but it doesn’t. which results in module A not
being updated.
關于“package.json與package-lock.json的區別是什么”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“package.json與package-lock.json的區別是什么”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。