凹逗工程師

成為一個更好的人

0%

Npm vs Yarn vs Pnpm:哪個套件管理工具最適合你?

前言

寫 JavaScript 專案,免不了要裝各種套件,這時候就會遇到三大門派:

  • npm,元老級選手,江湖地位穩固,但過去偶爾會「手滑」刪掉 node_modules 🙃
  • Yarn,帶著「速度更快、更可靠」的標語橫空出世,結果後來自己也改版改到讓人眼花撩亂 🤯
  • pnpm,號稱「不重複裝套件」,省空間又省時間,硬是要來顛覆傳統 💾💨

到底誰才是你的最佳選擇?這篇文章會帶你一探究竟,看看誰能成為你的專案好夥伴!

淺談我們耳熟能詳的 NPM

NPM 全名為 Node Package Manager,是個被廣用的 JavaScript 套件管理工具。讓我們開發者能夠輕鬆地安裝、共享、管理依賴庫和應用程式。搭配著 package.json 所詳細描述各個項目的版本資訊,及相關指令。

Yarn

Yarn 1.x

是在 2016 年由 Facebook 推出,為求更好的性能及安全性。雖然與 npm 都是 package manager,但是 yarn 有的是更快的性能及增強的安全性,還有一個特點:支持單一儲存庫的工作區。不需要擔心的是它與 npm 和 bower 相容,同時也支援不同的套件庫(registry),而指令也與 npm 相同或相似。只不過聲稱速度上優勢,但 npm 所具備的缺點還是無可避免地存在…

Yarn 2.x

儘管 Yarn 可以有效解決 NPM 的問題,但仍然是基於 NPM 的框架所開發,所以有了全新的開始 Yarn 2 的出生。你可能也有聽過 Yarn Modern, Yarn Berry 這些都泛指 Yarn 2.0 後的版本,用來區別原先的 Yarn Classic v1.x。注意:舊版本至從 Yarn 2 誕生後,將不再維護!

Plug’n’Play

執行 yarn install 後,將檔案存入專案的 .yarn/cache 中,省去 node_modules Link 的複雜 I/O 流程,並個別壓縮形成 .zip,因此空間減少了也能一起上傳至遠端管理,達成 Zero-Installs,確保建置在不同環境中都一致,大大的使多人協作的專案舒舒服服。

Pnpm

因為他優秀的時間維度及空間維度的效率,讓他在官網上自稱 Fast, disk space efficient package manager。幾個與其他前輩的不同之處:

  • 在共享依賴時使用的是符號連結(Symbolic Links)
  • 預設全局儲存一次相同依賴
  • 所有的專案 node_modules 中並不會真實的複製依賴,而是用指向到全局儲存
  • 安裝速度因為使用符號連結和全局緩存所以想比前輩是快得多
  • 嚴格的依賴樹(strict dependency tree)避免了幽靈依賴的潛在問題

Npm 近年來補齊的 Yarn 優勢

結論

npm 現在幾乎補齊了 Yarn 1 的所有優勢,甚至在 audit(安全性)等方面表現更好。
如果你只需要 標準的套件管理,npm 現在已經完全夠用了!

但如果你考慮效能、磁碟使用最佳化等,那 pnpm 可能才是更值得關注的選擇! 🚀

歡迎關注我的其它發布渠道