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

npm与pnpm--为什么推荐pnpm

包管理器中 npm是最经典的,但大家都任意忽略一个更优质的管理器:pnpm

1. 核心区别

特性npmpnpm
依赖存储方式扁平化结构(可能重复依赖)硬链接 + 符号链接(共享依赖,节省空间)
安装速度较慢(尤其是大型项目)更快(依赖复用,避免重复下载)
磁盘空间占用较多(相同依赖可能多次存储)占用极少(共享同一份依赖文件)
依赖管理严格性较松散(可能引发“幽灵依赖”)严格(仅允许访问声明的依赖)
安全性一般更高(依赖隔离性更好)
2. 原理通俗解释
  • npm

    • 把依赖包全部下载到项目的 node_modules,如果多个包依赖同一个库(如 lodash),可能会重复存储多份。

    • 例如:A 包依赖 lodash@4.17,B 包也依赖 lodash@4.17 → npm 会分别安装两次,占用双倍空间。

  • pnpm

    • 在电脑全局创建一个共享存储仓库,所有项目共享同一份依赖文件。

    • 通过硬链接(文件指针)指向存储仓库中的文件,避免重复下载。

    • 例如:A 包和 B 包都依赖 lodash@4.17 → pnpm 只下载一次,两个项目共享同一份文件。

3. 使用场景
工具适用场景
npm- 传统项目或对兼容性要求高的场景
- 依赖某些仅支持 npm 的工作流或工具
pnpm- 追求安装速度和节省磁盘空间
- 大型项目(如 monorepo)
- 需要严格依赖隔离
4. 迁移成本
  • 从 npm 迁移到 pnpm 通常是无缝的,只需删除 node_modules 和 package-lock.json,然后运行 pnpm install

  • 少数情况需注意:

    • 项目依赖了“幽灵依赖”(未在 package.json 声明但被直接引用)。

    • 某些工具链(如旧版 react-scripts)可能需要调整配置。

5,快速命令对比

功能npm 命令pnpm 命令
安装生产依赖npm install <包名>pnpm add <包名>
安装开发依赖npm install <包名> -Dpnpm add <包名> -D
全局安装npm install -g <包名>pnpm add -g <包名>
删除依赖npm uninstall <包名>pnpm remove <包名>

可以看见 pnpm和npm几乎一样的 0成本搬迁 

相关文章:

  • DeepSeek系列大语言模型推理优化技术深度解析
  • 字符串相乘(43)
  • 程序代码篇---python向http界面发送数据
  • el-dialog鼠标在遮罩层松开会意外关闭,教程图文并茂
  • 【技海登峰】Kafka漫谈系列(十一)SpringBoot整合Kafka之消费者Consumer
  • 【自然语言处理与大模型】向量数据库:Chroma使用指南
  • 医疗信息系统安全防护体系的深度构建与理论实践融合
  • 什么是 Flink Pattern
  • PDF批量合并拆分+加水印转换 编辑 加密 OCR 识别
  • C语言链表的操作
  • Office 中 VBE 的共同特点与区别
  • 【C++】unordered_map与set的模拟实现
  • Atcoder Beginner Contest 406
  • 【基于Spring Boot 的图书购买系统】深度讲解 用户注册的前后端交互,Mapper操作MySQL数据库进行用户持久化
  • 程序代码篇---数据包解析
  • 层次原理图
  • Android开发——原生渲染方案实现 PDF 预览功能
  • Elasticsearch 初步认识
  • C++控制结构详解:if-else、switch、循环(for/while/do-while)
  • MySQL事务的一些奇奇怪怪知识
  • 习近平:坚持科学决策民主决策依法决策,高质量完成“十五五”规划编制工作
  • 女子应聘文员被说“太丑”?官方回应:有关部门启动核查处置
  • 《掩耳盗邻》:富人劫富,是犯罪,也是赎罪?
  • 专利申请全球领先!去年我国卫星导航与位置服务产值超5700亿
  • 江南考古文脉探寻
  • 美国务卿与以色列总理通话,讨论加沙局势