浅谈npm和yarn和pnpm

我们都知道npm cnpm yarn 但是在最近出现的pnpm 为什么pnpm会这么爆火,有的人说,pnpm会碾压npm和yarn?下面的来谈一下 npm yarn 和pnpm的区别。

npm

npm是最常见的一个包管理器,这个我们就不多介绍了,我们来说他的不足之处:
1.在npm2.x版本中,通过的npm2.xnpm2 的 node_modules 是嵌套的,这样实则是有问题的,多个包之间难免会有公共的依赖,这样嵌套的话,同样的依赖会复制许多次,会占据比较大的磁盘空间,同时我们删除依赖的时候,我们会发现,依赖嵌套太深的话,我们无权限或者一次性删除。

浅谈npm和yarn和pnpm

2.高于npm2.x版本虽然解决了这个问题,依赖铺平了。所有的依赖不再一层层嵌套了,而是全部在同一层,这样也就没有依赖重复多次的问题了,也就没有路径过长的问题了

浅谈npm和yarn和pnpm

yarn

yarn的出现是为了解决npm2.x依赖重复许多次,嵌套路径过长的问题的,虽然高版本npm已经解决了这个问题,但是高版本npm和yarn出现另外一个问题就是幽灵依赖。什么幽灵依赖呢?
通俗理解:dependencies 里的依赖,但在代码里却可以 require 进来,这个很容易理解,由于都铺平了,那个依赖的依赖也都是可以找到的。但是这样是有隐患的,由于没有显式依赖,万一有一天别的包不依赖这个包了,那你的代码也就不能跑了,由于你依赖这个包,但是目前不会被安装了。这个就是典型的幽灵依赖的问题。

而且还有一个问题,就是上面提到的依赖包有多个版本的时候,只会提升一个,那其余版本的包不还是复制了许多次么,依然有浪费磁盘空间的问题

pnpm

pnpm的出现就是为了解决 npm和yarn遗留的问题。可以很好的解决一下幽灵依赖的问题。那我们来说一下pnpm的实现原理:

回想下 npm3 和 yarn 为什么要做 node_modules 扁平化?不就是由于同样的依赖会复制多次,并且路径过长在 windows 下有问题么?
那如果不复制呢,列如通过 link。
第一介绍下 link,也就是软硬连接,这是操作系统提供的机制,硬连接就是同一个文件的不同引用,而软链接是新建一个文件,文件内容指向另一个路径。当然,这俩链接使用起来是差不多的。
这样不会有复制多次的磁盘空间浪费,而且也不会有路径过长的问题。由于路径过长的限制本质上是不能有太深的目录层级,目前都是各个位置的目录的 link,并不是同一个目录,所以也不会有长度限制。

再把 node_modules 删掉,然后用 pnpm 重新装一遍,执行 pnpm install。
你会发现它打印了这样一句话:

浅谈npm和yarn和pnpm

除此之外 使用pnpm的动机

节省磁盘空间

浅谈npm和yarn和pnpm

提高安装速度

pnpm 分三个阶段执行安装:
1.依赖解析。 仓库中没有的依赖都被识别并获取到仓库。
2.目录结构计算。 node_modules 目录结构是根据依赖计算出来的。
3.链接依赖项。 所有以前安装过的依赖项都会直接从仓库中获取并链接到 node_modules。

浅谈npm和yarn和pnpm

安装和兼容性

npm install -g pnpm

浅谈npm和yarn和pnpm

功能比较

浅谈npm和yarn和pnpm

cli命令

浅谈npm和yarn和pnpm

查看依赖项

浅谈npm和yarn和pnpm

运行脚本

浅谈npm和yarn和pnpm

具体可以查看官方文档https://pnpm.io/zh/installation

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
辉果果吖的头像 - 鹿快
评论 抢沙发

请登录后发表评论

    暂无评论内容