5.3 包管理工具 npm yarn pnpm 對比

基本介紹

工具發布時間開發者定位
npm2010 年npm Inc / OpenJS FoundationNode.js 官方包管理器
Yarn2016 年Facebook(現 Meta)更快、更可靠的替代方案
pnpm2016 年Zoltan Kochan高性能、節省磁盤空間

一、核心機制與設計差異

1.?npm(Node Package Manager)

  • 依賴管理方式:采用扁平化依賴樹,自動將相同版本的依賴提升到頂層?node_modules,但復雜依賴關系可能導致重復安裝(如不同版本的同一包)。
  • 版本鎖定:通過?package-lock.json?文件記錄依賴的精確版本和下載地址,確保安裝一致性。
  • 安裝效率:早期版本安裝速度較慢(串行下載),新版雖引入并行優化,但仍存在依賴樹深度過深、磁盤空間占用大等問題。

2.?Yarn(Yet Another Resource Negotiator)

  • 核心優化
    • 并行下載:同時下載多個依賴,提升網絡利用率,尤其在大型項目中效果顯著。
    • 緩存機制:首次安裝后緩存依賴至本地,支持離線安裝和重復使用,減少網絡請求。
    • 安全校驗:下載依賴時驗證完整性,降低惡意包風險1。
  • 版本鎖定:使用?yarn.lock?文件確保依賴版本一致,解析算法較早期 npm 更嚴格。
  • Monorepo 支持:通過 Workspace 功能集中管理多項目依賴,減少重復安裝。

3.?pnpm(Performant NPM)

  • 創新機制
    • 內容尋址存儲:基于哈希值存儲依賴,相同內容的包僅保存一份,通過硬鏈接(節省空間)和符號鏈接(路徑映射)實現項目間共享。
    • 嚴格依賴隔離:僅允許顯式聲明的依賴被訪問,避免“幽靈依賴”(未聲明卻可引用的間接依賴)。
  • 安裝效率:磁盤空間占用顯著低于 npm/yarn,安裝速度快(得益于共享存儲和并行處理)。
  • 版本鎖定:通過?pnpm-lock.yaml?記錄依賴信息,支持更精細的版本控制

4.?pnpm 的獨特機制:

  • 所有包存儲在全局?Content Store(如?~/.pnpm-store
  • 項目中通過?硬鏈接?指向 store 中的文件(不占用額外磁盤)
  • 使用?符號鏈接?構建依賴樹,結構嚴格,避免“幻影依賴”

📌 幻影依賴(Phantom Dependencies):項目使用了未在 package.json 中聲明的依賴(因 npm/yarn 提升依賴導致可訪問)。

二、關鍵特性對比表

特性npmYarnpnpm
安裝速度較慢(早期串行,新版優化)快(并行下載+緩存)最快(共享存儲+硬鏈接)
磁盤占用高(重復安裝)中(緩存優化)低(內容尋址+硬鏈接)
依賴隔離弱(扁平化導致幽靈依賴)中(仍可能存在幽靈依賴)強(僅顯式依賴可訪問)
版本鎖定文件package-lock.jsonyarn.lockpnpm-lock.yaml
Monorepo 支持支持(v7+ workspaces)支持(Workspace)原生支持(高效依賴共享)
安全性基礎校驗嚴格校驗(哈希驗證)嚴格校驗+依賴隔離
兼容性最廣泛(Node.js 默認)兼容 npm 命令兼容 npm/yarn 命令

三、優缺點分析

1.?npm

  • 優點
    • Node.js 內置,無需額外安裝,新手友好;
    • 生態成熟,社區支持廣泛;
    • 新版(v7+)支持 Workspace 和并行安裝。
  • 缺點
    • 依賴樹深,磁盤占用大;
    • 早期版本安裝速度慢,存在幽靈依賴問題。

2.?Yarn

  • 優點
    • 并行下載+緩存機制,安裝速度快;
    • 安全校驗嚴格,適合團隊協作;
    • Workspace 功能完善,支持 monorepo。
  • 缺點
    • 仍可能存在幽靈依賴;
    • 緩存管理較復雜,部分場景下解析速度不如 pnpm1。

3.?pnpm

  • 優點
    • 極致節省磁盤空間(共享存儲);
    • 安裝速度最快,依賴隔離嚴格;
    • 原生支持 monorepo,適合大型項目。
  • 缺點
    • 符號鏈接機制可能導致部分工具兼容性問題(如某些打包工具);
    • 生態相對較新,社區資源略少于 npm/yarn。

四、適用場景推薦

工具適用場景不推薦場景
npm- 新手入門項目;
- 依賴簡單的小型項目;
- 需兼容舊 Node.js 環境。
- 大型 monorepo 項目;
- 對磁盤空間敏感的場景。
Yarn- 團隊協作項目(版本鎖定嚴格);
- 需要緩存優化的離線開發;
- monorepo 項目(Workspace)。
- 追求極致安裝速度和磁盤效率的場景。
pnpm- 大型項目或 monorepo(依賴共享);
- 多項目開發(節省磁盤空間);
- 對依賴安全性要求高的場景。
- 依賴老舊工具鏈(可能不兼容符號鏈接)。

五、Yarn, npm, pnpm 常用命令對比表

功能npmYarn (Classic v1)pnpm
初始化項目

npm init

npm init -y?(快速)

yarn init

yarn init -y

pnpm init

pnpm init -y

安裝所有依賴

npm install

npm i

yarn install

yarn

pnpm install

pnpm i

添加生產依賴

npm install <pkg>

npm i <pkg>

yarn add <pkg>pnpm add <pkg>
添加開發依賴

npm install <pkg> --save-dev

npm i <pkg> -D

yarn add <pkg> --dev

yarn add <pkg> -D

pnpm add <pkg> --save-dev

pnpm add <pkg> -D

添加全局包npm install <pkg> -gyarn global add <pkg>pnpm add -g <pkg>
升級包

npm update <pkg>

npm update?(所有)

yarn upgrade <pkg>

yarn upgrade?(所有)

pnpm update <pkg>

pnpm update?(所有)

pnpm up -i?(交互式)

移除依賴

npm uninstall <pkg>

npm rm <pkg>

npm un <pkg>

npm remove <pkg>

yarn remove <pkg>

pnpm remove <pkg>

pnpm rm <pkg>

pnpm un <pkg>

運行腳本

npm run <script>

npm start?(簡寫)

npm test?(簡寫)

yarn run <script>

yarn <script>?(簡寫)

pnpm run <script>

pnpm <script>?(所有腳本都可簡寫!)

列出依賴

npm list

npm ls

yarn list

pnpm list

pnpm ls

檢查過時依賴npm outdatedyarn outdatedpnpm outdated
查看包信息

npm view <pkg>

npm info <pkg>

yarn info <pkg>pnpm info <pkg>
清理緩存npm cache clean --forceyarn cache cleanpnpm store prune
交互式升級(無原生命令,需插件)

yarn upgrade-interactive

yarn upgrade-interactive --latest

pnpm update -i

pnpm up -i

為什么安裝 (依賴分析)npm why <pkg>yarn why <pkg>pnpm why <pkg>

總結

  • npm:生態最成熟,適合簡單項目和新手,但在效率和資源管理上落后于后兩者。
  • Yarn:平衡了速度、安全性和兼容性,適合團隊協作和需要緩存優化的場景。
  • pnpm:性能和資源管理最優,依賴隔離嚴格,是現代化項目(尤其是 monorepo)的首選,但需注意工具兼容性。

選擇時可根據項目規模、團隊協作需求及性能要求綜合判斷。對于新項目,推薦優先嘗試?pnpm?以獲得更高效的依賴管理體驗。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/94024.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/94024.shtml
英文地址,請注明出處:http://en.pswp.cn/web/94024.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

爬蟲基礎學習-授權認證,cookie認證,異常處理

驗證&#xff1a; HTTPBasicAuthHandler&#xff08;用戶基本的身份驗證處理&#xff09; HTTPPasswordMgrWithDefaultRealm&#xff08;經常和authhandler一起出現&#xff09;#創建一個密碼管理器 password_mgr urllib.request.HTTPPasswordMgrWithDefaultRealm() #添加進目…

開發避坑指南(34):mysql深度分頁查詢優化方案

問題語句 SELECT* FROMt_order_log l WHERE1 1 AND l.create_time > 2024-08-28 AND l.create_time < 2024-09-04 23:59:59 LIMIT 10000,10上述查詢sql&#xff0c;即使create_time字段已建立索引&#xff0c;但偏移量達到幾十萬時候&#xff0c;查詢耗時將近1分鐘&…

Unreal Engine UFloatingPawnMovement

Unreal? Unreal Engine - UFloatingPawnMovement&#x1f3f7; 定義&#x1f9e9; 類繼承關系?? 關鍵特性&#x1f6e0;? 常見配置&#xff08;Details 面板/代碼&#xff09;&#x1f4dd; 使用方法1) 在 Pawn 中添加組件&#xff08;C&#xff09;2) 綁定輸入與驅動移動3…

某網盤不好用?有沒有類似某網盤的存儲軟件?阿里云國際站 OSS:云存儲的全能助手,你 get 了嗎?

在這個數據爆炸的時代&#xff0c;數據存儲和管理成為了眾多企業和個人面臨的一大挑戰。想象一下&#xff0c;你是一位視頻博主&#xff0c;隨著粉絲量的增長&#xff0c;視頻素材越來越多&#xff0c;電腦硬盤根本裝不下&#xff0c;每次找素材都要花費大量時間。又或者你是一…

安全運維過程文檔體系規范

安全運維過程文檔體系規范 1. 文檔體系總覽 本文檔體系嚴格遵循“安全運維生命周期”模型設計&#xff0c;涵蓋業務建立、協同、運維管理、識別防御監測、響應和效果評估六個核心階段。體系旨在通過標準化、規范化的文檔管理&#xff0c;確保所有安全運維活動有章可循、有據可查…

【計算機網絡】 IPV4和IPV6區別

IPv4 和 IPv6 是兩代 互聯網協議&#xff08;Internet Protocol&#xff09;&#xff0c;它們的核心作用都是&#xff1a; &#x1f449; 為網絡設備分配唯一地址&#xff0c;讓它們能在網絡中互相通信。1?? 地址長度IPv4&#xff1a;32 位&#xff08;4 字節&#xff09;&am…

哈希:最長連續序列

題目描述&#xff1a;無序的整型數組&#xff0c;求連續最長序列。 輸入&#xff1a;nums [100,4,200,1,3,2] 輸出&#xff1a;4 &#xff08;因為&#xff1a;最長數字連續序列是 [1, 2, 3, 4]&#xff0c;長度為 4。&#xff09; 說明&#xff1a;連續指的是數字的連續…

python中的生成器

概要python中的生成器是一種特殊的迭代器&#xff0c;如果按照c語言的說法&#xff0c;就是一種特殊的指針&#xff0c;但是python語言的一個語言特性是兼容了函數化編程&#xff0c;類似lambda匿名函數機制。本文重點介紹生成器表達式的使用&#xff0c;是一種很快捷&#xff…

【Coze】Windows 環境下使用 Docker 部署 Coze Studio 的詳細指南

一、前言&#xff1a; Coze Studio 是一站式 AI Agent 開發工具。提供各類最新大模型和工具、多種開發模式和框架&#xff0c;從開發到部署&#xff0c;為你提供最便捷的 AI Agent 開發環境。 提供 AI Agent 開發所需的全部核心技術&#xff1a;Prompt、RAG、Plugin、Workflo…

票務系統小程序源碼

1. 系統概述 github地址 本系統是一個歷經多年迭代和市場檢驗的綜合性智慧票務解決方案。它以小程序和后臺管理系統為核心&#xff0c;深度整合了線上OTA渠道、線下多種支付方式以及各類智能硬件&#xff0c;為旅游景區、展館、活動中心等場景提供穩定、高效、功能完備的一體化…

Python 文件操作與異常處理全解析

目錄 一、文件的基本概念 1. 什么是文件 2. 文件操作的核心內容 3. 文件操作的作用 二、文件的基本操作 1. 文件操作三步走 2. 打開文件&#xff1a;open () 函數 2.1 文件路徑 2.2 常用 mode 模式 3. 寫入文件&#xff1a;write () 函數 4. 關閉文件&#xff1a;cl…

領碼方案:通用物聯網數據采集低代碼集成平臺——萬物智聯時代的黃金鑰匙

摘要&#xff1a; 領碼方案通過“協議抽象層低代碼引擎AI智能中樞”架構&#xff0c;實現物聯網設備數據采集、存儲、分析的零代碼配置化集成。支持200工業協議即插即用&#xff0c;10分鐘完成設備上云&#xff0c;數據流轉效率提升70%&#xff0c;AI模型調用耗時降低90%。該方…

后臺管理系統-10-vue3之用戶管理組件配置子路由和靜態頁面

文章目錄 1 配置子路由 1.1 router/index.js(添加路由) 1.2 views/User.vue(用戶管理) 1.3 驗證路由是否生效 2 User.vue(靜態頁面) 2.1 搜索框和表格的靜態搭建 2.2 用戶表格的數據獲取渲染 2.2.1 user.js(準備數據) 2.2.2 mock.js(攔截請求的URL) 2.2.3 api.js(axios請求的UR…

AMPAK正基科技系列產品有哪些廣泛應用于IOT物聯網

關於正基AMPAK 智慧物聯網 無線射頻模組專家 專業品牌 正基科技是一家擁有超過 20 年無線模組研發、設計、生產、行銷與產品技術整合服務經驗的公司。 有專業的高頻模組硬體設計及軟體整合工程師團隊&#xff0c;具備豐富的客戶應用經驗&#xff0c;能因應客戶與市場導向的產品…

【PyTorch】環境配置

文章目錄1. 配置cuda環境2. 配置conda環境3. 配置pytorch gpu環境1. 配置cuda環境 在命令行輸入以下命令可以查看當前顯卡驅動版本和最高支持的cuda版本 nvidia-smi根據cuda版本去官網下載并安裝cuda 下載鏈接&#xff1a;https://developer.nvidia.com/cuda-toolkit-archive…

vue3實現實現手機/PC端錄音:recorder-core

通過 recorder-core 這個插件實現錄音recorder-core插件使用下方的js文件是安裝后封裝的一個js文件&#xff0c;在需要使用的地方直接引入這個文件&#xff1a;import record from “./recorderCore.js”;// 文件名稱&#xff1a;recorderCore.js// recorder-core插件使用方式…

deepseek 本地部署,如何支持工具調用

這里需要考慮顯卡是否和模型匹配&#xff0c;支不支持推理 先把模版拉取到本地&#xff1a;git clone https://github.com/sgl-project/sglang.git 我的位置是 /data/home/sglang 注意模版位于sglang下的examples/chat_template中 根據對應的模版部署模型&#xff0c;比如 …

Excel中運行VB的函數

“插入” -》 “模塊”Function FormatCodeFlex(inputStr As String, Optional defaultVal As String "0") As StringOn Error GoTo ErrorHandlerDim parts() As StringDim i As Integer 使用 "-" 分割字符串parts Split(inputStr, "-") 確保至…

《零基礎入門AI:深度學習之NLP基礎學習》

一、自然語言處理&#xff08;NLP&#xff09;概述 1. 基本概念 ? 自然語言處理&#xff08;Natural Language Processing, NLP&#xff09;是人工智能與計算語言學交叉的核心領域&#xff0c;致力于實現計算機對人類自然語言的自動理解、分析、生成與交互。其研究目標在于構…

保姆級Debezium抽取SQL Server同步kafka

前言&#xff1a; Debezium SQL Server連接器捕獲SQL Server數據庫模式中發生的行級更改。 官方2.0文檔&#xff1a; Debezium connector for SQL Server :: Debezium Documentation 有關與此連接器兼容的SQL Server版本的信息&#xff0c;請參閱 SQL Server Database: 201…