是的,我要寫一下我們目錄中可能最被忽略的檔案package-lock.json

package-lock.json 是一個極其重要的文件,它可以幫助您避免在儲存庫中出現大量的「boom pop bam bam 🔥」

因此,在討論 package-lock.json 之前,我們先討論語意版本控制和 package.json。

1. 語意版本控制

語意版本控製或 SemVer 是對套件進行版本控制的理想方式。它們通常寫成1.4.5 (major.minor.patch)

替代文字

1a.錯誤修復/補丁版本

包括錯誤修復/文件拼字錯誤等。

1b.次要版本

包括新增的功能或 API,不會破壞舊版本的任何內容,因此在 v1.1.0 上執行的任何內容也應該在 v1.9.0 上執行。

1c.主要版本

包括破壞東西的版本。它可以包括刪除 API 或更改函數名稱,因此適用於 v1.0.0 的任何內容可能不一定適用於 v2.0.0

2. package.json

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的新檔案來避免這種情況

3. package-lock.json

package-lock.json meme

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


共有 0 則留言