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 本地修改即时生效、便于调试 如果目标被移动,链接会失效
相关推荐
Cobyte5 分钟前
4.响应式系统基础:从发布订阅模式的角度理解 Vue3 的数据响应式原理
前端·javascript·vue.js
晓得迷路了7 分钟前
栗子前端技术周刊第 124 期 - ESLint v10.2.0、React Native 0.85、Node.js 25.9.0...
前端·javascript·eslint
半个俗人23 分钟前
fiddler的基础使用
前端·测试工具·fiddler
a11177626 分钟前
变电站数字孪生大屏ThreeJS 开源项目
前端·信息可视化·开源·html
恋猫de小郭26 分钟前
AI 的公开测评得分都在作弊,就像泡面的封面,一切以实物为准
前端·人工智能·ai编程
禅思院28 分钟前
使用 VueUse 构建一个支持暂停/重置的 CountUp 组件
前端·vue.js·架构
薛定e的猫咪38 分钟前
2026 年 4 月实测:OpenAI Codex 保姆级教程,从安装到 MCP、Skills 与多智能体协作
前端·数据库·人工智能
I love studying!!!41 分钟前
Web应用程序:用户账户
前端·数据库·sqlite
whuhewei41 分钟前
React性能优化
前端·react.js·性能优化
m0_7381207242 分钟前
渗透知识ctfshow——Web应用安全与防护(三)
android·前端·安全