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成本搬迁 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值