当前位置: 首页 > news >正文

pnpm相对于npm,yarn的优势

🔹 背景

npm:最早的包管理器,简单直接,但有依赖重复、安装慢的问题。
yarn:Facebook 推出,解决 npm 的速度、锁文件一致性问题。
pnpm:新一代包管理器,用 符号链接 + 内容寻址存储,更高效、更安全。

✅ pnpm 的优势(相比 npm / yarn)

1.磁盘空间优化(内容寻址存储,硬链接 + 符号链接)

npm/yarn 安装:把依赖完整复制到 node_modules,每个项目可能重复存储几百 MB。
pnpm 安装:
先把包放到 全局内容寻址存储(store)(类似 git 的 .git/objects)。
不同项目用 硬链接/符号链接 指向 store 的文件,而不是复制一份。
优势:多个项目共享依赖,节省 70-90% 磁盘空间。

2. 更快的安装速度

npm:逐级展开依赖,冗余、慢。
yarn:并行下载、缓存好,但依赖还是复制到每个项目。
pnpm:直接从全局 store 硬链接,避免重复下载 + 拷贝,速度更快。
典型表现:第一次安装 ≈ yarn,第二次安装(已有缓存)> yarn >> npm。

3. 严格的依赖管理(避免幽灵依赖)

npm / yarn:node_modules 会把依赖拍平,子依赖可能被 hoist(提升)到顶层,导致“幽灵依赖”:

// package.json 里没声明 lodash
import _ from 'lodash'; // 在 npm/yarn 下可能能跑

实际上 lodash 是某个依赖的子依赖,但被提升到顶层,代码能跑,但隐藏风险。
pnpm:依赖安装在 node_modules/.pnpm/… 下,每个包自己的依赖都放在独立目录。
如果你没有在 package.json 里声明 lodash,上面代码会直接报错。
优势:强制依赖显式声明,彻底避免幽灵依赖。

4. Monorepo 支持更好

pnpm 原生支持 monorepo(通过 pnpm workspace)。
特点:
跨项目依赖共享 store,更节省空间。
依赖解析和软链接天然支持 workspace。
跨包开发调试无需复杂配置(对比 yarn workspace / lerna,配置更轻量)。

5. 安全性与一致性更高

严格的依赖解析机制,避免不同环境下依赖结构不一致。
对锁文件(pnpm-lock.yaml)的解析更快、更稳定。
天然避免“某台电脑能跑、另一台跑不动”的问题。

6. 其他优势

pnpm fetch:可以先下载依赖(离线安装,CI/CD 更快)。
pnpm install --frozen-lockfile:保证依赖版本完全一致。
可配置性更高:支持 packageExtensions,修复三方库的错误依赖声明。
社区趋势:越来越多大厂和开源项目在转向 pnpm(例如 Vite、Next.js、Vue3 的仓库都推荐 pnpm)。

⚖️ 对比总结

特性npmyarnpnpm
磁盘占用高(重复)高(重复)低(全局 store + 链接)
安装速度最慢较快最快(缓存 + 硬链接)
幽灵依赖存在存在禁止,强依赖声明
Monorepo 支持一般支持 (workspace)原生支持 (workspace)
锁文件一致性npm5 之后改善良好更稳定
趋势老牌曾经火逐渐成为主流

文章转载自:

http://qD7Z9mwn.dhckp.cn
http://xYmPEG62.dhckp.cn
http://nmkO1Ub8.dhckp.cn
http://JWb8Wisj.dhckp.cn
http://5qQ2Njoc.dhckp.cn
http://numVeKkF.dhckp.cn
http://2GAS60Xk.dhckp.cn
http://LI7fZj0u.dhckp.cn
http://6YYj9llx.dhckp.cn
http://IAlh1LAS.dhckp.cn
http://L3vUDTHj.dhckp.cn
http://ziEaQPPu.dhckp.cn
http://3yUPGAYy.dhckp.cn
http://o85SHrj5.dhckp.cn
http://N7eH9VHz.dhckp.cn
http://tXEZ4pEL.dhckp.cn
http://0TeFJQ5S.dhckp.cn
http://TLNmTvwi.dhckp.cn
http://aDX5Emld.dhckp.cn
http://tfv1OMKE.dhckp.cn
http://VZbG7uBq.dhckp.cn
http://Q90PQ3eN.dhckp.cn
http://OtcHu559.dhckp.cn
http://4djYfSic.dhckp.cn
http://oDTeg37V.dhckp.cn
http://byN7Krk5.dhckp.cn
http://0cz8TXCB.dhckp.cn
http://C8NioRo7.dhckp.cn
http://PJUJLM5E.dhckp.cn
http://KSetDD6i.dhckp.cn
http://www.dtcms.com/a/378254.html

相关文章:

  • vue3源码学习(四)watch 源码学习
  • 利用JSONCrack与cpolar提升数据可视化及跨团队协作效率
  • 短剧小程序系统开发:打造个性化娱乐新平台
  • 从MySQL到StarRocks:全量与增量同步的最佳实践
  • 第七篇:识破“共因失效”——如何阻止汽车系统的“团灭”危机
  • SSL部署完成,https显示连接不安全如何处理?
  • Java 与 AI 生态:深度学习框架的支持现状
  • Linux iptables 实战:配置 NAT 端口转发访问内网 MySQL
  • docker,自定义镜像dockerfile
  • 分布式专题——9 Redis7底层数据结构解析
  • WPF 数据绑定模式详解(TwoWay、OneWay、OneTime、OneWayToSource、Default)
  • 前端埋点系统架构设计与优化实践
  • SEO新手入门:什么是SEO及其作用
  • Nginx性能优化与防盗链实战指南
  • C++类(上)默认构造和运算符重载
  • 字符串大数相加:从初稿到优化的思路演进
  • 追根索源-神经网络的灾难性遗忘原因
  • 零碎的嵌入式笔记2
  • 室内配线工程量计算-批量测量更方便
  • 深入理解 Gateway 网关:原理、源码解析与最佳实践
  • 3.List,set 与 Zset(Redis数据类型)
  • 前沿探索:RISC-V 架构 MCU 在航天级辐射环境下的可靠性测试
  • 苹果上架App软件全流程指南:iOS 应用发布步骤、App Store 上架流程、uni-app 打包上传与审核技巧详解
  • NW622NW623美光固态闪存NW624NW635
  • 38.自编码器:AI的压缩与重建艺术
  • leetcode-python-2418按身高排序
  • 【学习日记】
  • 【Android View】事件分发机制
  • 深入了解linux系统—— 线程池
  • 视频理解新纪元!VideoChat双模架构突破视频对话瓶颈,开启多模态交互智能时代