硬链接与符号链接
文件的本质
在操作系统中,文件实际上是一个指针,只不过它指向的不是内存地址,而是一个外部存储地址(这里的外部存储可以是硬盘、U 盘、甚至是网络)
当我们删除文件时,删除的实际上是指针,因此,无论删除多么大的文件,速度都非常快。
当写入新文件的时候会优先覆盖已经被删除了的文件数据。
(像我们的 U 盘、硬盘里的文件虽然说看起来已经删除了,但是其实数据恢复公司是可以恢复的)
正因为数据还是存在的,只要删除文件后再没有存储其它文件就可以恢复。
文件的拷贝
如果你复制一个文件,需要经过 2 个步骤。
将该文件的指针指向的内容执行复制
产生一个新文件指向新的内容
硬链接
通过硬链接,不会产生额外的磁盘占用,因为它们指向同一个磁盘空间。
硬链接的概念来自于 Unix 操作系统,它是指将一个文件 A 指针复制到另一个文件 B 指针中,文件 B 就是文件 A 的硬链接。
硬链接是一个实实在在的文件,node 不对其做任何特殊处理,也无法区别对待,实际上,node 根本无从知晓该文件是不是一个硬链接。
硬链接的创建方式
ln 链接名称 目标文件
windows 下执行
mklink /h 链接名称 目标文件
WARNING
由于目录(文件夹)不存在文件内容,所以不能对目录创建硬链接
符号链接(软链接)
符号链接又称为软连接,如果为某个文件或文件夹 A 创建符号连接 B,则 B 指向 A。
由于符号链接指向的是另一个文件或目录,当 node 执行符号链接下的 JS 文件时,会使用原始路径。类似于 windows 的快捷方式。
创建方式
ln -s 链接名称 目标文件
区别
硬链接只能链接文件,而软链接既可以链接文件,又可以链接目录。
硬链接创建出来后,仅关联文件内容。而软链接则始终和目标文件关联,不与内容直接相关。
pnpm 中对硬链接和符号链接的应用
生成
.pnpm
包管理目录扫描根目录,看是否有缓存,如果没有,下载到
缓存
中从缓存的对应包使用
硬链接
生成文件到相应的代码包目录
中使用符号链接,将子包直接依赖放置到各个子包的目录中
在工程的
node_modules
下使用符号链接
放置直接依赖