shhider / shhider.github.io

我的博客。前端内容正在迁移到 Issues 🔝
http://shhider.github.io
1 stars 0 forks source link

pnpm 是如何节约 node_modules 磁盘占用的 #10

Open shhider opened 1 year ago

shhider commented 1 year ago

之前知道 pnpm 是节约磁盘的,以为就是 packages 都下载到一个全局位置,各 project 的 deps 中直接 soft link(也没实际尝试

最近手头的 project 切换到 pnpm,install 后发现是在 project/node_modules 中有个 .pnpm 目录、其中是各 package 各版本,项目的 deps 则 soft link 到 .pnpm 中对应的 pkg。

这就引起我的疑惑:如此的话,当我要 re-install 时、直接删除整个 node_modules 目录,.pnpm 目录也被删了,再 install 时岂不是要重新下载?还是说我这 project 单独配置了要这样?

经过查找资料,发现这是 byDesign 的:看起来只是 project 的 deps 是 soft link 到 .pnpm 目录,但 .pnpm 中的 pkgs 的确是 link 到了全局的 pkgs 缓存,只是用了 hard link,直接 ls 命令罗列的内容无法一眼看出 hard link(实际上第二列、即权限列后的数字,就是 hard link 的数量)

reference:

https://javascript.plainenglish.io/what-is-pnpm-why-you-should-try-it-as-a-frontend-developer-69a3a7b34f5b

https://pnpm.io/faq#why-does-my-node_modules-folder-use-disk-space-if-packages-are-stored-in-a-global-store