Node.js中npm i和npm ci的區別


在使用npm (Node包管理器)處理Node.js時,安裝專案所需的包非常重要。雖然大多數開發者知道執行npm install或npm i會發生什麼,但npm ci經常出現在關於持續整合和持續交付管道的討論中,以及可重複構建流程中。本文介紹了“npm i”和“npm ci”的區別,以及在什麼情況下應該使用其中一個而不是另一個,以及如何使用它們。

什麼是npm i (或npm install)?

npm i”實際上是npm install的縮寫,這是應用程式中用於安裝package.json檔案中列出的依賴項的主要命令。

npm i的關鍵功能

1. 安裝package.json中列出的所有依賴項。

2. 如果存在package-lock.json檔案,“npm i”將

  • 檢查所有依賴項的版本是否完全相同。
  • 這是透過執行命令npm install完成的。如果package.json發生更改,例如新增新的依賴項,則package-lock.json將被更新。

3. 建立或覆蓋package-lock.json檔案,該檔案指示最新安裝的版本。

4. 如果不存在這樣的資料夾,則它將建立一個node_modules資料夾。如果存在這樣的資料夾,它只會複製尚未安裝的必要依賴項。

5. 支援版本靈活性:如果不存在package-lock.json,它將下載package.json版本約束中指定的版本。

何時使用npm i?

  • 開發階段:在包含、更新和修剪依賴項時。
  • 非CI環境:當版本差異是可以接受的,而不是僅僅需要可重複性時。

什麼是npm ci?

npm ci仍然代表“持續整合”。它是為需要冪等構建的永久無人值守環境構建的,例如在CI/CD工作流中。

npm ci的關鍵功能

必須從具有package-lock.json和node_modules目錄的工作專案中複製一份。npm ci – 如果package-lock.json檔案不可用,則會引發錯誤。

1. 執行乾淨安裝:它會刪除node_modules目錄,並更精確地根據package-lock.json檔案中的內容部署包。

2. 比npm i更快:與npm install相比,如果只使用package-lock.json並繞過版本解析過程,npm ci執行速度快得多,這在管理CI/CD方面很有優勢。

3. 不更新package-lock.json:這也保證了package-lock.json不會更改,因為在部署時您不希望版本更改。

何時使用npm ci?

  • CI/CD管道:可重複構建,因為npm ci命令每次都安裝完全相同的依賴項版本。
  • 生產環境:確保生產環境複製測試環境中使用的版本。
  • 快速設定:由於安裝速度更快,因此適用於安裝至關重要且依賴項更改較少的情況。

npm i和npm ci的主要區別

下表突出顯示了“npm i”和“npm ci”的主要區別:

特性 npm i npm ci
安裝行為 基於package.json安裝,更新package-lock.json 僅基於package-lock.json安裝,不更新
版本解析 解析版本,可能會更新package-lock.json 跳過版本解析,安裝速度更快
可重複性 不能保證跨環境一致性 確保構建一致性
用例 開發,靈活安裝 CI/CD,生產,可重複安裝
依賴項資料夾 根據需要更新或建立node_modules 在安裝之前刪除node_modules
速度 較慢(尤其是在大型專案中)

由於嚴格遵守鎖定檔案而更快

示例場景

1. 開發新功能:要安裝依賴項並新增或修改包,請使用“npm i”命令。如果存在任何更改,這也會將package-lock.json更改為新的更改。

2. 在CI/CD中部署Web應用程式:請使用“npm ci”安裝package-lock.json檔案中定義的精確版本。這確保了環境的副本,這對於避免某些部署問題非常重要。

3. 倉庫的新克隆:如果您正在使用新的克隆,並且希望安裝package.json中指定的精確依賴項,請使用npm ci而不是npm i。這樣,安裝速度非常快,並且它們不會從原始碼構建,因此克服了因依賴項版本更新而可能出現的任何潛在問題。

npm i和npm ci的最佳實踐

  • 保持package-lock.json更新:確保經常簽入package-lock.json檔案,以確保您擁有正確的依賴項樹。
  • 在CI/CD管道中使用npm ci:它專門用於CI/CD場景,在這些場景中,意外使用npm install可能會導致版本不匹配。
  • 在本地執行npm i:遠端使用“npm ci”:對於本地開發,“npm i”更為寬鬆,而在遠端構建或部署中,“npm ci”帶來一致性。

結論

npm inpm ci都是非常重要的命令,在用Node.js編寫的專案中具有特定的作用。雖然npm i對於開發非常有用且適用,但npm ci旨在確定性和理想的生產管道。在本文中,我們演示瞭如何識別開發團隊和運營團隊之間的差異,以及如何利用它來最佳化開發流程並提高部署的可靠性。

更新於:2024年11月8日

瀏覽量:25

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.