pnpm 简单了解一下

什么是pnpm

pnpm 可以理解为npm plus,是个打包工具。

它解决了什么问题

主要解决了npm扁平化安装的时候,相同的包重复安装以及幽灵依赖的问题,以此来减少node_modules体积过大的问题。

好处有哪些

提高了包安装速度
减少了对相同包的重复安装
高效利用磁盘空间

小知识扫盲

(为个人理解之后的输出)

幽灵依赖就是依赖包再依赖的东西。比如npm安装express,node_modules里面除了express还会下载很多其他express模块依赖的包(幽灵依赖),但是用pnpm安装的话,能看到就只加载了express模块:

那么pnpm加载express的时候 他的幽灵依赖去哪里了呢?

在使用pnpm安装express的时候,会自动生成一个.pnpm文件,里面存储的就是express的幽灵依赖。

软链接:指向源文件的指针,是一个仅仅只有几个字节的单独文件,拥有自己独立的inode。软链接只是对源文件的引用,前者有变化不会影响后者,但后者有变化会影响前者。

粗暴理解: 软链接就类似于桌面快捷方式,删除‘桌面快捷方式’(软链接)不会对源文件造成任何影响。若删除了源文件,可以看到‘桌面快捷方式’(软链接)依然还存在,但会访问报错。

硬链接:与源文件指向同一个物理地址,与源文件共享数据,两者共同拥有一个inode. 删除源文件,硬链接文件不会被删除,可以用来防止文件被误删。

粗暴理解:硬链接类似于直接访问源文件的另一个入口,访问源文件跟访问硬链接文件,其实访问的都是同一个文件,只是一个是A口,一个是 B口而已,删除了任何一个入口,还有另外一个入口的引用存在,文件依然存在。

(可通过 ln -s创建一个软链接, ln 创建一个硬链接)

原理

pnpm主要是针对在npm扁平化管理pakage的时候出现的相同包多次安装,导致占用空间大,包冗余的问题做的一种解决方案。

简单来说就是 在使用pnpm install安装的时候,会将依赖的软链接(也就是快捷方式)安装在node_modules目录下,然后生成一个.pnpm目录,里面存放的是node_modules下依赖的硬链接。如图: 在使用pnpm安装express的时候,只会在node-modules下生成一个express,这个express是.pnpm目录下安装的express的软链接(有个小箭头‘->’),而.pnpm里面存放的是对express的硬链接。

粗暴来讲就是:在使用pnpm安装的时候,把安装包的硬链接存放在.pnpm目录下,然后为了方便访问,再发送了个快捷方式到与.pnpm同级的node_modules下。

当后面其他安装包有依赖express且版本相同时,就会先通过访问快捷方式然后找到.pnpm下的硬链接,进而访问到安装包,以达到避免重复安装的目的。
pnpm 简单了解一下_第1张图片

(可以看到pnpm的目录结构其实并不深,安装的也只是不同版本的包,这里可以理解为.pnpm目录下存放的都是对所有依赖的不同包或者不同版本依赖的硬链接。然后如果后面的依赖需要引入前面已加载好的依赖时,就通过软链接去.pnpm目录下查找依赖的引用地址)。

粗暴理解: pnpm install的时候对依赖建立硬链接,并存储在.pnpm目录下,共享依赖数据,再对.pnpm文件里的东西建立软链接,并存在node_modules下面,通过访问所谓的’快捷方式‘,从而引用到已安装好的依赖包,进而避免幽灵依赖的问题,减少重复安装。

一句话简单总结

利用软链接硬链接的方式来减少对相同包的重复安装,从而达到既能节省依赖内存又能提高安装速度的效果。

tips: 有理解不恰当的地方或者有更好的理解方式 欢迎讨论呀~~~~

你可能感兴趣的:(npm,前端,react.js)