本文將深入探討 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:
<code class="language-bash">npm install -g yarn</code>
然後,我們可以通過在項目根目錄中運行 yarn set version 命令,在每個項目的基礎上使用它:
<code class="language-bash">yarn set version berry</code>
在這種情況下,berry 是我們想要設置的版本。
如果我們想更新到最新版本,我們運行以下命令:
<code class="language-bash">yarn set version latest</code>
使用 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 應用程序:
<code class="language-bash">npm install -g yarn</code>
在 Yarn 中,您可以使用等效的 dlx 命令來實現相同的結果:
<code class="language-bash">yarn set version berry</code>
我們將探討的其餘功能是 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中文網其他相關文章!