是的,我要寫一下我們目錄中可能最被忽略的檔案package-lock.json !
package-lock.json 是一個極其重要的文件,它可以幫助您避免在儲存庫中出現大量的「boom pop bam bam 🔥」 。
因此,在討論 package-lock.json 之前,我們先討論語意版本控制和 package.json。
語意版本控製或 SemVer 是對套件進行版本控制的理想方式。它們通常寫成1.4.5
(major.minor.patch)
包括錯誤修復/文件拼字錯誤等。
包括新增的功能或 API,不會破壞舊版本的任何內容,因此在 v1.1.0 上執行的任何內容也應該在 v1.9.0 上執行。
包括破壞東西的版本。它可以包括刪除 API 或更改函數名稱,因此適用於 v1.0.0 的任何內容可能不一定適用於 v2.0.0
package.json 是一個文件,其中包含有關您的專案的資訊(名稱、版本等),並列出了您的專案所依賴的套件。
正如您在上圖中看到的,在 package.json 下列出的每個依賴項之後都有一個類似^2.20.0
的數字,它是該包的版本,但在版本之前有^
。所以^這個小傢伙可以成為你專案的徹底破壞者。
版本之前的 ^ 符號告訴 npm,如果有人克隆該專案並在目錄中執行 npm install,則在他的 node_modules 中安裝該套件的最新次要版本。
假設我在 package.json 中使用了^2.20.0
的 Express,然後 Express 團隊發布了版本 2.24.0,現在當有人克隆我的存儲庫並在該目錄中執行npm install
時,他們將獲得版本2.24. 0(您可以也把~
代替^
它將更新到最新的補丁版本)
但是,如果套件開發人員破壞了次要版本上的任何功能,這可能是一個大問題,因為它可能會使您的應用程式崩潰。
所以npm後來發布了一個名為package-lock.json的新檔案來避免這種情況
package-lock.json 將簡單地避免安裝更新的次要版本的這種一般行為,因此當有人克隆您的儲存庫並在其電腦中執行 npm install 時。 NPM 將查看 package-lock.json 並安裝與所有者安裝的套件完全相同的版本,因此它將忽略 package.json 中的^
和~
。
此外,它還包含一些其他元訊息,可以節省您在安裝 npm 時從 npm 獲取資料的時間。
您可以參考npm 部落格以獲取有關 package-lock.json 的更多資訊。
謝謝您閱讀此篇!
我希望這有用 🎉 :)
原文出處:https://dev.to/saurabhdaware/but-what-the-hell-is-package-lock-json-b04