超越npm和yarn的包管理工具,为什么说pnpm才是工程化项目的未来。

pnpm 是什么

npmyarn一样,pnpm是一个包管理工具。不一样的是,pnpm解决了npmyarn一直都没有解决的痛点。在许多方面比npmyarn更优秀。

pnpm对比npm/yarn的优点

  • 更快速的依赖下载
  • 更高效的利用磁盘空间
  • 更优秀的依赖管理

更快速的依赖下载

根据官方提供的数据↓

从图上我们可以看出,pnpm平均比npmyarn快上2~3倍。这一点在依赖的下载上额外明显。

更高效的利用磁盘空间

为什么说pnpm会比npmyarn更高效的利用磁盘空间?

pnpm 有一个store的概念(是一块存储文件的空间,后面会说到),内部使用"基于内容寻址"的文件系统来存储磁盘上所有的文件,这一套系统的优点是:

不会重复下载依赖

举个例子 假设出现这么一个情况↓

你4个项目都依赖了express.js(第三方插件)。如果是npm/yarn的话,express.js就会被安装4个在你的磁盘空间当中。从而出现下面这个情况↓

但是pnpm 得益于"基于内容寻址"的文件系统,使用pnpm下载的文件不论被多少项目所依赖,都只会在磁盘中写入一次。后面再有项目使用的时候会采用硬链接的方式去索引那一块磁盘空间。

所以,在同样被多个项目依赖的时候,pnpm对磁盘的占用如下↓

更好玩的是

如果有一天你所依赖的版本提升了。假设从express@2.0升级到了express@3.0。而express@3.0express@2.0多了20个文件。这个时候pnpm并不会删除express@2.0再去重新下载express@3.0。而是复用express@2.0原本的磁盘内容。再在express@2.0的基础上增加20个文件形成express@3.0

更优秀的依赖管理

在npm1和npm2的时候。依赖结构是这样的

代码示例(一)

node_modules 
└─ 依赖A  ├─ index.js  ├─ package.json  └─ node_modules  └─ 依赖B  ├─ index.js  └─ package.json
 └─ 依赖C  ├─ index.js  ├─ package.json  └─ node_modules  └─ 依赖B  ├─ index.js  └─ package.json 

上面这种结构会导致哪些问题呢࿱

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值