您是否應該將node_modules文件夾提交到Git?

這是一個很好的問題。有優點也有缺點。我討論了該主題,以便您可以發表自己的看法。

您是否應該將node_modules文件夾提交到Git?

我提到了Git,但同樣適用於您碰巧使用的任何版本控制系統

這是一個很好的問題。有優點也有缺點。

我建議默認為不是提交node_modules文件夾,並將其添加到您的.gitignore文件。

您可能有特殊需求,需要扭轉這一決定。

我討論了該主題,以便您可以發表自己的看法。

這是一些贊成不提交node_modules的參數

您保持Git的歷史記錄整潔。添加新程序包時,您將存儲package.jsonpackage-lock.json文件更改。當您決定更新軟件包的版本時,您存儲的只是package-lock.json文件更改。

package-lock.json是npm的一個相對較新的功能,收縮包裝過去使用的命令

您可以避免必須在存儲庫中放置數百MB的依賴項,這意味著隨著時間的流逝,使用它的速度將更快。切換分支和簽出代碼是受存儲庫大小極大影響的2個操作。

使用分支時,您可能會遇到合併衝突,這些合併衝突不僅限於代碼,還涉及依賴項代碼。這不好處理,可能會使您浪費很多時間。避免推桿

如果更改依賴關係,則拉取請求或合併將在該過程中涉及更多文件。工具變慢甚至決定不顯示完整的差異(例如,GitHub)

如果部署到與開發計算機不同的平台上,則需要重新編譯本機節點模塊(常見用例:在Mac上進行開發,在Linux上進行部署)。你需要打電話npm rebuild,這會使服務器不同步。

不提交node_modules意味著您需要在package.json(和package-lock.json)作為強制步驟。這很棒,因為您可能沒有勤奮,如果不這樣做,某些npm操作可能會中斷。

提示:您無需使用特定版本package.json文件,自引入package-lock.json文件。

如果單獨使用dependenciesdevDependencies通過提交node_modules您基本上要提交的文件夾devDependencies並且沒有(簡便)的方式來使生產版本擺脫它們。

可能導致您提交node_modules的原因以及如何緩解它們的原因

一個npm軟件包的作者可能會從npm註冊表中刪除該軟件包。它發生在著名的left-pad incident in 2016 (閱讀更多)。對於流行的軟件包,這種情況很少發生。如果發生這種情況,您可能將無法再使用該特定功能。

您可能還會爭辯說npm不能保證無限期地存在,它可能會消失,因此要保證將來擁有應用程序的完整代碼,一種簡單的方法是將其與應用程序一起提交。

每次使用軟件包時,請在GitHub上創建一個fork。每隔一段時間,使其與原點保持最新(可以自動進行)。

這並不總是可行的,因為軟件包可以具有數十個自己的依賴項。

您可以為項目使用專用的存儲庫服務器,並使用該服務器託管所有依賴項。

選項包括

提交依賴項的另一個原因是,如果發現錯誤或想要向庫中添加某些內容,則可以快速編輯代碼。

這是一把雙刃劍:如果這樣做,那麼如果發布了新版本,您將失去升級軟件包的能力,這對於快速,臨時的修復非常有用。

最佳解決方案是向原始項目提交執行所需功能的PR或將其分支,然後將分支用作依賴項。

免費下載我的Node.js手冊


更多節點教程: