软链接和硬链接的应用
- 软链接又称为符号链接:类似于快捷方式,存储的是文件的绝对路径。是另外一种文件,在硬盘上有独立的区块,访问时替换自身路径。
- 硬链接:与普通文件没什么不同,inode 都指向同一个文件在硬盘中的区块
由于 Linux 下的文件是通过索引节点(Inode)来识别文件,在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号 (Inode Number)。在 Linux 中,多个文件名指向同一索引节点是存在的,所以硬连接指通过索引节点来进行的连接,即每一个硬链接都是一个指向对应区域的文件。
硬链接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要文件,以防止“误删”的功能,由于对应该目录的索引节点有一个以上的连接,假设我们删除了原始的 foo.txt 文件,此时文件的内容依然存在,所以只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个链接被删除后,文件的数据块及目录的连接才会被释放,也就是说,文件才会被真正删除
用到的地方
-
yarn workspace
, monorepo 的代码仓库中使用 yarn workspace 管理项目的方式, projectB 依赖 projectA,会在根 node_modules 下创建一个 projectA 的软链接
指向本地的 projectA -
pnpm
:省内存空间,只因为把当前计算机所有的 npm 依赖都下载到一个地方,加入 projectA 用到了,会在 node_modules 下创建一个硬链接
指向实际这个包所以的地方。
-bit 组件
: node_modules/@bit 目录下会有软链
到 components/demo/zoo 的 my-test.demo.zoo,这样在业务代码里就可以通过 @bit/my-test.demo.zoo 引入 Zoo 组件 -
npm link
: 只在/usr/local/lib/node_modules 里存的不是真实的文件,而是存了一个快捷方式(即创建一个软链接
),指向你当前执行 npm link 的目录 -
npm run xxx
, 比如 npm i @vue/cli-service 会在 node_modules/.bin 目录中创建 vue-cli-service 为名的可执行文件。.bin 目录不是任何一个 npm 包,目录下的文件,表示这是一个个软链接,打开文件可以看到文件顶部#!/usr/bin/env node
,表示这是一个脚本。
npm 脚本(npm scripts)的原理: 每当执行 npm run,就会自动新建一个 Shell,在这个 Shell 里面执行指定的脚本命令。npm run 新建的这个 Shell,会将当前目录的 node_modules/.bin 子目录加入 PATH 变量,执行结束后,再将 PATH 变量恢复原样。当前目录的 node_modules/.bin 子目录里面的所有脚本,都可以直接用脚本名调用,而不必加上路径。npm scripts 使用指南
参考文档