pnpm原理

前置知识

硬链接(Hard Link)

linux 硬链接生成命令(windows网上搜一下)

bash 复制代码
ln [源文件] [目标链接]

试验

新建源文件

输入命令(根据自己想在的路径来)

bash 复制代码
ln /Users/xuweijie/Desktop/test/pnpm-demo/源文件.txt  /Users/xuweijie/Desktop/test/pnpm-demo/硬连接1.txt

多出了一个(硬连接1.txt)文件

接下来我们修改硬连接1.txt

查看源文件.txt 会发现内容也自动变化了

结论

生成硬链接会把源文件"拷贝"一份文件,与普通拷贝区别,就是源文件和硬连接底层共享inode(更细的内容,AI一下),所以修改硬链接1内容,源文件的内容也会更新。

  • 硬链接不能用于生成目录
  • windows要注意不能跨盘使用(AI)
  • 硬链接不额外占用空间

软链接(符号链接 Symbol Link)

linux 软链接生成命令(windows网上搜一下)

bash 复制代码
ln -s [源文件] [软链接文件]

试验

新建源文件

输入命令

bash 复制代码
ln -s /Users/xuweijie/Desktop/test/pnpm-demo/src/软链接源文件.js /Users/xuweijie/Desktop/test/pnpm-demo/index.js

我们会发现右边有个小箭头 这就是软链接,类似于快捷方式

.pnpm

pnpm 安装vue、react

查看软链接路径

cd 进入node_modules

细节

上面图中node_modules下面的vue和react都是软链接,指向.pnpm, 这样有效避免"幽灵依赖"问题,比如vue依赖bable,在项目中require('babel'),因为依赖会在.package.json的目录node_modules扁平化寻找,同级是找不到babel,会报错, Module Not Found, 所以避免了幽灵依赖问题。 因为vue是软链接,import vue from vue 实际执行的是.pnpm下面的vue

下面看.pnpm内容

可以看到.pnpm的结构是

依赖名称@版本号/node_modules/依赖

拿vue举例子,这里的vue文件夹实际上是从全局存放在.pnpm-store/vue,去做硬链接"拷贝"到.pnpm/vue@3.5.19/node_module下面,这样就节省了磁盘空间

可以vue的依赖是@vue/** @vue/** 下面几个文件又是软链接

可以看到软链接又指向这里

那么如何执行到@vue的软链接呢

总结

由此可以得出结论,项目依赖通过软链接指向.pnpm下面的"依赖名称@版本号/node_modules/依赖" 这里的依赖是硬链接"拷贝"的.pnpm-store下面的对应版本号的依赖,而"依赖名称@版本号/node_modules/依赖"的package.json的依赖在同目录下生成软链接指向.pnpm的同名依赖,依次循环

相关推荐
ℋᙚᵐⁱᒻᵉ鲸落5 小时前
移动端滑动手势冲突:overflow: auto导致外层横向滑动失效
前端·javascript·css·vue.js·html
默_笙7 小时前
🎃 前端学了 Next.js,后端该学啥?NestJS 就是 Node 版的蜜雪冰城
前端·javascript
前端snow8 小时前
ai agent --- 实现 openclaw 定时间效果
前端
码云之上8 小时前
换模型之后,Chatbot 为什么要自己做 compact?
前端·agent·前端工程化
星栈8 小时前
自定义 UI-UX-Pro-Max 的 CSV 知识库,把 AI 生成的后台拉回行业该有的样子
前端·agent·weui
研☆香8 小时前
简单的图片上传 删除 预览
前端
ITresearchGuest9 小时前
我用 AI 一小时写了一个世界杯数据可视化平台|前端 VibeCoding 初体验
前端·人工智能·信息可视化
慧一居士10 小时前
Vite项目中使用Less步骤,详细使用示例
前端·css
花间相见10 小时前
【LangChain组件03】—— LangChain Agents 执行与状态:工作流程与状态管理实战
java·前端·langchain
kyriewen10 小时前
面试官让我用 AI 重构一个 8 年陈的 React 组件——他说他不看代码,只看我会不会拆
前端·javascript·面试