软链接和硬链接理解
-
软链接:像“快捷方式”,指向另一个路径
-
硬链接:像“同一份文件的另一个名字”,本质还是同一份内容
区别:
- 硬链接:“共享同一份文件数据”
- 多个文件名直接指向同一份文件数据
- 看起来像有多份文件,实际底层数据只有一份
- 比如A、B、C有3份文件,这3份文件都是指向同一份文件数据
- 如果删除A文件,那么B、C 文件还是在,因为数据还在
- 修改其中一个,本质上就是在修改那一份共享数据
- 多个文件名直接指向同一份文件数据
- 软链接:“共享同一个真实位置”
- 共享一个文件路径,如果真实路径删除了,其他文件引用的路径就会失效
- 其他文件都是指向共享同一个路径
- 软链接不是一份独立文件内容,它只是“指向真实路径”
记忆:
- 软链接 = 快捷方式 = 路径跳转
- 硬链接 = 别名 = 同一份内容的多个名字
软链接:
-
A、B、C都只是入口,真正存内容的是real.txt -
所以如果你通过
A增加内容,比如追加一行,本质上是给real.txt增加内容。 那B、C再打开时,看到的也会是修改后的内容
A -> real.txt
B -> real.txt
C -> real.txt
JS代码层面理解
硬链接:
- 多个对象,指向同一个文件数据 (指向同一个堆内存地址)
- 多个变量引用同一个对象
const obj = { name: 'skill-a' };
const a = obj;
const b = obj;
a.version = 1;
console.log(b.version); // 1
a ----\
> 同一份文件数据
b ----/
软链接
- 从js角度,软链接就像一个代理对象,这个代理对象返回原始对象的引用
- 删除了原始对象,那么代理对象就会找不到对应的目标路径,就会报错
let originObj = { name: '这是一个原始对象' }
let proxyObj = {
getRealObj: () => originObj
}
相关应用场景
- 1、前端开发中应用场景
- 2、版本部署中,应用场景
- 3、skills安装,通过软链接方式理解
前端开发中应用场景
-
本地联调组件库
- 好处是改完组件库,业务项目马上能看到效果
- 业务项目通过软链接引用本地组件库
- 无需每次发布到npm
-
monorepo理解
- 多个 package 放在一个仓库里统一管理
- 包多、重复依赖多,彼此引用频繁、包互相引用
- 软链接可以帮助本地包之间建立引用关系
-
pnpm理解
- 硬链接:复用依赖包内容,减少磁盘占用
- 软链接:组织和管理
node_modules中各个包的结构 - 可以简单理解为:
- 硬链接负责“省空间”
- 软链接负责“包之间结构”
版本部署中,应用场景
- 部署时常用软链接把
current指向某个发布目录 - 发布新版本时,只需要把软链接切到新目录
- 回滚时,再切回旧目录即可
可以更方便切换版本
skills 安装
- 当通过npm方式来安装skills时,会选择相关模型添加到对应skills,以及会选择添加skills的方式是软连接还是直接copy目录,推荐是软链接
- 在agent目录下建立一个“入口”,这个入口实际指向 skills 的真实位置路径
- 软链接可以让多个 agent 共享同一个来源skills技能
- 单一来源 :所有 agent 指向同一套 skills
- 易于更新 :更新一次,所有 agent 同步生效
- 节省空间 :不重复存储相同文件