
「想要理解pnpm是怎么做的,需要一些操作系统的知识」
在操作系统中,文件实际上是一个指针,只不过它指向的不是内存地址,而是一个外部存储地址(这里的外部存储可以是硬盘、U盘、甚至是网络)

当我们删除文件时,删除的实际上是指针,因此,无论删除多么大的文件,速度都非常快。像我们的U盘、硬盘里的文件虽然说看起来已经删除了,但是其实数据恢复公司是可以恢复的,因为数据还是存在的,只要删除文件后再没有存储其它文件就可以恢复,所以真正删除一个文件就是「可劲存可劲删」

如果你复制一个文件,是将该文件指针指向的内容进行复制,然后产生一个新文件指向新的内容。

硬链接的概念来自于 Unix 操作系统,它是指将一个文件A指针复制到另一个文件B指针中,文件B就是文件A的硬链接。

通过硬链接,不会产生额外的磁盘占用,并且,两个文件都能找到相同的磁盘内容。
硬链接的数量没有限制,可以为同一个文件产生多个硬链接。
windows Vista操作系统开始,支持了创建硬链接的操作,在cmd中使用下面的命令可以创建硬链接。
mklink /h 链接名称 目标文件
「例:创建一个硬连接」
1、首先创建一个文件夹temp,并且在temp文件夹创建一个article.txt文本文件

2、接下来,我要在temp文件夹的根目录(pnpm包管理器下面)创建一个硬链接


mklink /h link.txt temp\article.txt 回车
article.txt和link.txt是一样的了

注意☛:
符号链接又称为软连接,如果为某个文件或文件夹A创建符号连接B,则B指向A。

windows Vista操作系统开始,支持了创建符号链接的操作,在cmd中使用下面的命令可以创建符号链接:
mklink /d 链接名称 目标文件
# /d表示创建的是目录的符号链接,不写则是文件的符号链接
早期的windows系统不支持符号链接,但它提供了一个工具junction来达到类似的功能。
快捷方式类似于符号链接,是windows系统早期就支持的链接方式。它不仅仅是一个指向其他文件或目录的指针,其中还包含了各种信息:如权限、兼容性启动方式等其他各种属性,由于快捷方式是windows系统独有的,在跨平台的应用中一般不会使用。
「硬链接:」
硬链接是一个实实在在的文件,node不对其做任何特殊处理,也无法区别对待,实际上,node根本无从知晓该文件是不是一个硬链接
「符号链接:」
由于符号链接指向的是另一个文件或目录,当node执行符号链接下的JS文件时,会使用原始路径。比方说:我在D盘装了LOL,在桌面创建了LOL快捷方式,相当于是符号链接,双击快捷方式运行游戏,在运行游戏的时候是按照LOL原始路径(D盘路径)运行的。
pnpm使用符号链接和硬链接来构建node_modules目录
下面用一个例子来说明它的构建方式
假设两个包a和b,a依赖b:

假设我们的工程为proj,直接依赖a,则安装时,pnpm会做下面的处理:



这样做的目的,是为了保证a的代码在执行过程中,可以读取到它们的直接依赖

以上就是今天的分享了,希望能帮到大家!
END