這是一個很好的問題。有優點也有缺點。我討論了該主題,以便您可以發表自己的看法。
您是否應該將node_modules文件夾提交到Git?
我提到了Git,但同樣適用於您碰巧使用的任何版本控制系統
這是一個很好的問題。有優點也有缺點。
我建議默認為不是提交node_modules文件夾,並將其添加到您的.gitignore
文件。
您可能有特殊需求,需要扭轉這一決定。
我討論了該主題,以便您可以發表自己的看法。
這是一些贊成不提交node_modules的參數
您保持Git的歷史記錄整潔。添加新程序包時,您將存儲package.json
和package-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
文件。
如果單獨使用dependencies
和devDependencies
通過提交node_modules
您基本上要提交的文件夾devDependencies
並且沒有(簡便)的方式來使生產版本擺脫它們。
可能導致您提交node_modules的原因以及如何緩解它們的原因
一個npm
軟件包的作者可能會從npm註冊表中刪除該軟件包。它發生在著名的left-pad
incident in 2016 (閱讀更多)。對於流行的軟件包,這種情況很少發生。如果發生這種情況,您可能將無法再使用該特定功能。
您可能還會爭辯說npm
不能保證無限期地存在,它可能會消失,因此要保證將來擁有應用程序的完整代碼,一種簡單的方法是將其與應用程序一起提交。
每次使用軟件包時,請在GitHub上創建一個fork。每隔一段時間,使其與原點保持最新(可以自動進行)。
這並不總是可行的,因為軟件包可以具有數十個自己的依賴項。
您可以為項目使用專用的存儲庫服務器,並使用該服務器託管所有依賴項。
選項包括
- 西諾比亞
- npm_lazy
- npm-lazy-mirror
- 人為的
- npm企業,來自npm公司
提交依賴項的另一個原因是,如果發現錯誤或想要向庫中添加某些內容,則可以快速編輯代碼。
這是一把雙刃劍:如果這樣做,那麼如果發布了新版本,您將失去升級軟件包的能力,這對於快速,臨時的修復非常有用。
最佳解決方案是向原始項目提交執行所需功能的PR或將其分支,然後將分支用作依賴項。
免費下載我的Node.js手冊
更多節點教程:
- npm軟件包管理器簡介
- Node.js簡介
- 使用Axios的HTTP請求
- 在何處託管Node.js應用
- 使用Node.js與Google Analytics(分析)API進行交互
- npx節點包運行器
- package.json指南
- npm在哪里安裝軟件包?
- 如何更新Node.js
- 如何使用或執行使用npm安裝的軟件包
- package-lock.json文件
- 使用npm的語義版本控制
- 您是否應該將node_modules文件夾提交到Git?
- 將所有Node依賴項更新到最新版本
- 使用Node.js解析JSON
- 查找npm軟件包的安裝版本
- Node.js流
- 安裝較舊版本的npm軟件包
- 在Node中獲取當前文件夾
- 如何在Node中記錄對象
- 使用導出從Node文件公開功能
- 節點和瀏覽器之間的區別
- 使用Node發出HTTP POST請求
- 使用Node獲取HTTP請求主體數據
- 節點緩衝區
- Node.js的簡要歷史
- 如何安裝Node.js
- 使用Node您需要知道多少JavaScript?
- 如何使用Node.js REPL
- 節點,從命令行接受參數
- 使用Node輸出到命令行
- 接受來自Node中命令行的輸入
- 使用`npm uninstall`來卸載npm軟件包。
- npm全局或本地軟件包
- npm依賴項和devDependencies
- Node.js事件循環
- 了解process.nextTick()
- 了解setImmediate()
- 節點事件發射器
- 建立一個HTTP服務器
- 使用Node發出HTTP請求
- Node fs模塊
- 使用Axios的Node中的HTTP請求
- 使用Node讀取文件
- 節點文件路徑
- 用Node寫入文件
- 節點文件統計
- 在Node中使用文件描述符
- 在Node中使用文件夾
- 節點路徑模塊
- Node http模塊
- 將WebSockets與Node.js結合使用
- 使用MySQL和Node的基礎知識
- Node.js中的錯誤處理
- 哈巴狗指南
- 如何從Node.js讀取環境變量
- 如何從Node.js程序退出
- Node os模塊
- 節點事件模塊
- 節點,開發與生產之間的區別
- 如何檢查Node.js中是否存在文件
- 如何在Node.js中創建一個空文件
- 如何使用Node.js刪除文件
- 如何使用Node.js獲取文件的最後更新日期
- 如何在JavaScript中確定日期是否為今天
- 如何將JSON對象寫入Node.js中的文件
- 為什麼要在下一個項目中使用Node.js?
- 從任何文件夾運行Web服務器
- 如何將MongoDB與Node.js結合使用
- 使用Chrome DevTools調試Node.js應用
- 什麼是pnpm?
- Node.js運行時v8選項列表
- 使用npm時如何解決“缺少寫訪問權限”錯誤
- 如何在Node.js中啟用ES模塊
- 如何使用Node.js生成子進程
- 如何在Express中同時獲取已解析的正文和原始正文
- 如何在Node.js中處理文件上傳
- 節點模塊中的對等依賴性是什麼?
- 如何使用Node.js編寫CSV文件
- 如何使用Node.js讀取CSV文件
- 節點核心模塊
- 使用Node.js一次增加多個文件夾的數量
- 如何將畫布打印到數據URL
- 如何使用Node.js和Canvas創建和保存圖像
- 如何使用Node.js下載圖像
- 如何在Node.js中批量重命名文件
- 如何獲取Node中文件夾中所有文件的名稱
- 如何使用Promise和基於Node.js回調的等待功能
- 如何在本地測試NPM軟件包
- 如何在運行時檢查當前的Node.js版本
- 如何使用Sequelize與PostgreSQL交互
- 使用Node.js服務HTML頁面
- 如何解決Node.js中的util.pump不是函數錯誤