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 本地修改即时生效、便于调试 如果目标被移动,链接会失效
相关推荐
牛奶1 小时前
2026年大模型怎么选?前端人实用对比
前端·人工智能·ai编程
牛奶1 小时前
前端人为什么要学AI?
前端·人工智能·ai编程
Kagol4 小时前
🎉OpenTiny NEXT-SDK 重磅发布:四步把你的前端应用变成智能应用!
前端·开源·agent
GIS之路5 小时前
ArcGIS Pro 中的 notebook 初识
前端
JavaGuide5 小时前
7 道 RAG 基础概念知识点/面试题总结
前端·后端
ssshooter6 小时前
看完就懂 useSyncExternalStore
前端·javascript·react.js
格砸6 小时前
从入门到辞职|从ChatGPT到OpenClaw,跟上智能时代的进化
前端·人工智能·后端
Live000007 小时前
在鸿蒙中使用 Repeat 渲染嵌套列表,修改内层列表的一个元素,页面不会更新
前端·javascript·react native
柳杉7 小时前
使用Ai从零开发智慧水利态势感知大屏(开源)
前端·javascript·数据可视化