pnpm 中的硬链接(hard link)和符号链接(symlink)

1️⃣ 硬链接(Hard Link)

概念

硬链接是文件系统提供的一种机制,它允许多个文件名(路径)指向 同一个物理数据块

  • 文件内容存储在磁盘上只有一份。
  • 创建硬链接不会占用额外的磁盘空间。
  • 删除某一个文件名并不会删除实际数据,数据只有在 最后一个硬链接删除后 才会被释放。

在 pnpm 中的应用

pnpm 为了 节省磁盘空间和提高安装速度 ,会将依赖包存放在一个全局存储区(~/.pnpm-storenode_modules/.pnpm),然后在项目的 node_modules 中用 硬链接 指向全局存储的包。

例子:

bash 复制代码
~/.pnpm-store/lodash/4.17.21/node_modules/lodash
   ↑(硬链接)
project/node_modules/lodash

这样多个项目可以共享同一份 lodash,而不必在每个项目里都复制一份。

优点

  • 节省磁盘空间
  • 安装速度快
  • 真正的"同一个文件",修改一个地方,其他地方也看到(通常包都是只读,不会修改)

缺点

  • 不同文件系统之间不能硬链接
  • Windows 某些版本可能需要管理员权限

概念

符号链接是一个特殊文件,它 本身只是一个指向另一个文件或目录的路径

  • 可以跨文件系统。
  • 删除符号链接不会删除原文件,只是链接消失。
  • 访问符号链接就像访问目标文件一样。

在 pnpm 中的应用

pnpm 使用符号链接主要在 工作区(workspace)开发模式下,例如你在 monorepo 中开发多个包:

  • 假设 package-a 依赖 package-b,而 package-b 在同一个 monorepo 中。
  • pnpm 会在 package-a/node_modules/package-b 放一个符号链接,指向 package-b 的源码目录,而不是复制整个包。

例子:

css 复制代码
monorepo/
├─ packages/
│  ├─ package-a/node_modules/package-b -> ../../package-b
│  └─ package-b/

这样做的好处是:

  • 本地开发修改立即生效,不需要重新安装依赖。
  • 保持 monorepo 内包之间的正确依赖关系。

🔹 总结

类型 pnpm 使用场景 优点 缺点/注意
硬链接 全局存储区到项目 node_modules 节省磁盘、加快安装、多个项目共享包 跨文件系统不方便、只读包更适合
符号链接 工作区开发、monorepo 本地修改即时生效、便于调试 如果目标被移动,链接会失效
相关推荐
换日线°15 分钟前
前端炫酷展开效果
前端·javascript·vue
夏幻灵1 小时前
过来人的经验-前端学习路线
前端
CappuccinoRose1 小时前
React框架学习文档(七)
开发语言·前端·javascript·react.js·前端框架·reactjs·react router
FFF-X1 小时前
前端字符串模糊匹配实现:精准匹配 + Levenshtein 编辑距离兜底
前端
Hi_kenyon2 小时前
Ref和Reactive都是什么时候使用?
前端·javascript·vue.js
止观止2 小时前
深入理解 interface vs type:终结之争
前端·typescript
css趣多多2 小时前
vue环境变量
前端
RFCEO2 小时前
前端编程 课程十五、:CSS核心基础3:文字+段落样式
前端·css·文字+段落样式·css文本样式·美化页面文本内容·演示动画说明·单行文字垂直居中技
摇滚侠2 小时前
【程序员入门系列】jQuery 零基础入门到精通!Jquery 选择器 API
前端·javascript·jquery
源力祁老师2 小时前
深入解析 Odoo 中 default_get 方法的功能
java·服务器·前端