本文將深入探討 Yarn 和 npm 這兩大流行的 JavaScript 包管理器,並對它們各自的優缺點進行比較,助您為項目選擇合適的工具。
核心要點
基礎知識
在過去,簡單的文本編輯器足以讓開發者創建和管理大部分項目。但如今,網絡發生了翻天覆地的變化。現在,即使是一個相當簡單的項目,也可能包含數百甚至數千個腳本,以及復雜的嵌套依賴關係,如果沒有某種自動化工具,這些依賴關係根本無法管理。這就是包管理器發揮作用的地方。
包管理器是一種工具,它可以以多種方式自動處理項目的依賴關係。例如,借助包管理器,我們可以安裝、卸載、更新和升級包,配置項目設置,運行腳本等等。所有繁瑣的工作都由包管理器完成,我們只需要專注於編碼本身。
npm 代表 Node 包管理器 (Node Package Manager)。它於 2010 年發布,開啟了 Web 開發的新時代。在此之前,項目依賴項是手動下載和管理的。 npm 正是推動 Web 發展到更高水平的魔杖。
npm 實際上包含三部分:
但是,當大多數人談論 npm 時,他們通常指的是最後一種——CLI 工具。它作為默認的包管理器與每個新的 Node 安裝一起提供。這意味著您可以立即開始使用它。
如果您想深入了解 npm 的使用方法,請參閱我們的 Node 包管理器指南。
Yarn 代表 Yet Another Resource Negotiator(另一種資源協商器)。 Yarn 包管理器是 npm 的替代方案,由 Facebook 於 2016 年 10 月發布。 Yarn 的最初目標是解決 npm 的缺點,例如性能和安全問題。 Yarn 迅速成為安全、快速和可靠的 JavaScript 依賴項管理工具。
但 npm 團隊吸取了教訓,並通過實現缺失的功能迅速彌補了 npm 的不足。
讓我們快速回顧一下歷史,以了解全局情況:
如今,這兩個包管理器在包管理競賽中不相上下,提供類似的功能。但仍然存在一些差異,有助於我們確定使用哪個。
在本教程的其餘部分,我們將探討 npm 和 Yarn 之間的主要異同。
Yarn 與 npm:安裝比較
我們將從 npm 和 Yarn 的安裝過程開始比較。
如上所述,npm 預裝在 Node 中,因此無需手動安裝 npm。
相反,Yarn 需要顯式安裝。首先,我們需要全局安裝 Yarn:
npm install -g yarn
然後,我們可以通過在項目根目錄中運行 yarn set version 命令,在每個項目的基礎上使用它:
yarn set version berry
在這種情況下,berry 是我們想要設置的版本。
如果我們想更新到最新版本,我們運行以下命令:
yarn set version latest
使用 Yarn,我們可以為每個項目使用不同的版本。
要使用 npm 執行相同的操作,您需要安裝 nvm(Node 版本管理器)。以下是如何使用 nvm 安裝多個 Node 版本的方法。
現在,讓我們看看如何安裝項目依賴項。
當我們運行 npm install 時,依賴項會依次安裝。終端中的輸出日誌信息豐富,但有點難以閱讀。
要使用 Yarn 安裝包,我們運行 yarn 命令。 Yarn 並行安裝包,這是它比 npm 更快的原因之一。如果您使用的是 Yarn 1,您會看到 yarn 輸出日誌簡潔明了,視覺上易於區分。它們也以樹狀形式排序,便於理解。但在版本 2 和 3 中,日誌並不那麼直觀易懂。
到目前為止,我們已經看到 npm 和 Yarn 有不同的安裝包命令。在下一節中,我們將探討更多命令。
比較 npm 和 Yarn 命令
npm 和 Yarn 共享許多命令,但也有一些不相同的命令。讓我們首先探討一些相同的命令:
這些命令使在兩個管理器之間切換變得容易,但有一些不相同的命令可能會造成混淆。讓我們在下一個列表中看看它們是什麼:
Yarn 還有一些 npm 沒有的獨特命令。例如,why 命令顯示需要包的原因:它可能是依賴項、本地模塊或項目依賴項。
Yarn 與 npm:速度和性能
每當 Yarn 或 npm 需要安裝包時,它們都會執行一系列任務。在 npm 中,這些任務是按包依次執行的,這意味著它會在一個包完全安裝後才會繼續下一個包。相反,Yarn 並行執行這些任務,從而提高了性能。
雖然這兩個管理器都提供緩存機制,但 Yarn 似乎做得更好一些。通過實現零安裝範例(我們將在功能比較部分看到),它能夠幾乎立即安裝包。它緩存每個包並將其保存在磁盤上,因此下次安裝此包時,您甚至不需要互聯網連接,因為包是從磁盤離線安裝的。
儘管 Yarn 有一些優勢,但在其最新版本中,Yarn 和 npm 的速度相當。因此,我們在這裡無法定義一個明確的贏家。
Yarn 與 npm:安全比較
對 npm 的主要批評之一是關於安全性的。之前的 npm 版本有一些嚴重的安全性漏洞。
從版本 6 開始,npm 在安裝過程中會審計包,並告知您是否發現任何漏洞。我們可以通過對已安裝的包運行 npm audit 來手動執行此檢查。如果發現任何漏洞,npm 將向我們提供安全建議。
如上圖所示,我們可以運行 npm audit fix 來修復包漏洞,如果可以修復,則依賴項樹也將被修復。
Yarn 和 npm 都使用加密哈希算法來確保包的完整性。
Yarn 與 npm:功能比較
與命令一樣,npm 和 Yarn 也共享一些功能,但也有一些區別。讓我們首先探討這兩個包管理器共享的共同功能。
在 package.json(npm 和 Yarn 用於跟踪項目依賴項的文件)中,版本號並不總是精確的。相反,您可以定義一個版本範圍。這樣,您可以選擇包的特定主要版本和次要版本,但允許 npm 安裝可能修復某些錯誤的最新補丁。
在語義版本控制的理想世界中,補丁版本不會包含任何重大更改。但不幸的是,情況並非總是如此。 npm 使用的策略可能會導致兩台機器最終擁有相同的 package.json 文件,但安裝了不同版本的包——這可能會引入錯誤。
為了避免包版本不匹配,已安裝的精確版本會固定在包鎖定文件中。每次添加模塊時,npm 和 Yarn 分別創建(或更新)package-lock.json 和 yarn.lock 文件。這樣,您可以保證另一台機器安裝完全相同的包,同時仍然在 package.json 中定義了一系列允許的版本。
工作區允許您擁有一個 monorepo 來管理多個項目中的依賴項。這意味著您有一個單一的頂級根包,它有多個稱為工作區的子包。
npx 命令用於從 ./node_modules/.bin 運行腳本。它還允許您從 npm 註冊表執行包,而無需將它們安裝到您的項目依賴項中。例如,您可以通過運行以下命令來創建一個新的 React 應用程序:
npm install -g yarn
在 Yarn 中,您可以使用等效的 dlx 命令來實現相同的結果:
yarn set version berry
我們將探討的其餘功能是 Yarn 獨有的。
零安裝將緩存存儲在您的項目目錄中,位於 .yarn 文件夾中。當您使用 yarn 或 yarn add
Plug’n’Play 是一種替代安裝策略。 Yarn 不會生成 node_modules 目錄並將解析留給 Node,而是生成單個 .pnp.cjs 文件,該文件將包映射到磁盤上的位置及其依賴項列表。此功能可以加快項目啟動速度,優化依賴項樹,加快安裝速度,當然還可以消除對 node_modules 文件夾的需求。
Yarn 內置了一個許可證檢查器,這在開發應用程序的不同場景中非常有用。
Yarn 與 npm:選擇哪個包管理器
我們已經介紹了 npm 和 Yarn 的各種異同,但我們還沒有確定哪個更好,以及我們應該選擇哪個。一如既往,答案取決於我們的願望和需求。
作為一般指南,我總結如下建議:
如果您仍然難以在 npm 和 Yarn 之間做出明確的決定,那麼您可以檢查 pnpm,它試圖結合這兩個包管理器的優點,並且是包管理池中的第三大巨頭。
Yarn 與 npm:結論
我們已經了解了包管理器對於現代 Web 開發的重要性,並且我們比較了市場上最流行的兩個競爭對手。它們都有各自的優點和缺點,為了選擇最適合您的,您需要清楚地了解您的需求。決定哪個更適合您的最佳方法是嘗試兩者,看看哪個性能更好。
最後,不要過度思考。只需選擇一個,然後轉到有趣的部分:創建很棒的應用程序!
關於 Yarn 與 npm 的常見問題解答
Yarn 和 npm 都是 JavaScript 的包管理器,但它們有一些關鍵區別。 Yarn 由 Facebook 開發,旨在解決 npm 的一些缺點。它提供了更高的速度、更好的安全性以及更可靠的依賴項管理。另一方面,npm 是 Node.js 的默認包管理器,擁有更大的用戶群。由於其更簡單的語法,它也更容易被初學者使用。
是的,Yarn 通常比 npm 快。這是因為 Yarn 並行安裝包,這大大加快了安裝過程。另一方面,npm 順序安裝包,這可能會比較慢。
Yarn 有一個名為校驗和的功能,它在執行已安裝包的代碼之前驗證其完整性。這增加了一層 npm 不具備的額外安全層。但是,npm 在最近的版本中對其安全功能進行了重大改進。
雖然從技術上講可以在同一個項目中同時使用 Yarn 和 npm,但不建議這樣做。這是因為 Yarn 和 npm 以不同的方式處理依賴項,這可能會導致項目中的不一致和錯誤。
Yarn 使用鎖定文件來鎖定項目依賴項的版本。這確保了在所有機器上,每次安裝都會產生 node_modules 中完全相同的文件夾結構。 npm 也使用鎖定文件,但它不如 Yarn 的嚴格。
由於其嚴格的鎖定文件和校驗和功能,Yarn 通常被認為比 npm 更可靠。但是,npm 在最近的版本中在可靠性方面取得了重大改進。
由於存在時間較長,npm 擁有更大的社區和更多可用的包。但是,Yarn 越來越受歡迎,並且擁有不斷壯大的社區。
從 npm 切換到 Yarn 的一些挑戰包括學習新的語法、遷移現有項目以及適應 Yarn 嚴格的依賴項管理。
Yarn 的語法與 npm 的語法略有不同。例如,要使用 Yarn 安裝包,可以使用命令“yarn add”,而使用 npm,則可以使用“npm install”。
由於其更簡單的語法和更大的社區,npm 通常被認為更容易被初學者使用。但是,Yarn 提供了更高級的功能,並且對於更有經驗的開發人員來說是一個不錯的選擇。
以上是紗線與NPM:您需要知道的一切的詳細內容。更多資訊請關注PHP中文網其他相關文章!