# pnpm 缓存占用太大，怎么清理？

> 用 MangoDisk 查看 pnpm 缓存的大小和路径，分清 store prune 与清空目录的区别，了解清理对项目依赖的影响，找出值得释放的空间。

项目删了，磁盘却没空出多少；顺着目录一找，pnpm 的 store 里还留着不少文件。这不一定是没删干净：pnpm 会把下载过的包放在共享存储里，供不同项目复用，不会随着某个项目一起消失。

**想先清掉用不上的包，可以用 pnpm store prune。如果想知道 pnpm 和其他开发工具究竟占了多少空间，可以先用 MangoDisk 扫描，再挑值得清理的部分。** 不必一上来就删整个 store，更不用动项目源码和锁文件。

## 用 MangoDisk 找出占空间的开发缓存

电脑上装过 npm、pnpm、Python、Rust，缓存往往散在不同目录。与其挨个找，不如打开 MangoDisk 的[深度清理](/zh/docs/features/deep-clean)，扫描后直接比较各项占用。

![MangoDisk 深度清理展示 pnpm 等开发工具缓存的大小和路径](https://assets.mangodisk.app/images/screenshots/windows/zh/light-01-deep-cleanup.jpg)

找到 pnpm 缓存项，展开查看目录和大小。如果它只占了一点空间，就没必要急着清；如果已经积累了不少，再根据后面的说明选择整理还是清空。扫描本身不会删除文件。

MangoDisk 目前覆盖 Windows 的 `%LocalAppData%\pnpm\store`，以及 macOS 的 `~/Library/pnpm/store` 和 `~/Library/Caches/pnpm`。改过存储位置的话，先查询当前使用的目录：

```bash
pnpm store path
```

这条命令只显示路径。**MangoDisk 没扫描到自定义目录，不代表那里没有缓存。** 可以到文件资源管理器或 Finder 中打开返回的路径，确认占用。

## 只想整理不用的包，先用 prune

Windows 打开 PowerShell，macOS 打开终端。等正在进行的安装和构建结束后，运行：

```bash
pnpm store prune
```

它会删除 store 中未被引用的包，不经过回收站，不是把整个目录清空。以后切换分支或安装旧版本依赖时，如果又需要这些包，pnpm 会重新下载。[pnpm 官方文档](https://pnpm.io/cli/store)也建议偶尔整理即可，不必每次安装后都清一次。

执行完还有文件很正常，`prune` 的目的本来就不是让目录变空。近期需要离线工作，或者私有软件源暂时连不上，先保留这份缓存，免得之后安装时缺包。

## 想清空缓存，要先确认依赖能重新下载

如果你想清掉已确认可重建的缓存，而不只是整理无用包，可以在 MangoDisk 中取消其他项目的选择，只勾选核对过的 pnpm 缓存项，再确认清理。

**这里和 prune 不一样：MangoDisk 按选中的缓存目录清理，不会替你逐个判断包是否还被项目使用。** 清理前先结束相关任务，确认没有混放个人文件，并准备好之后重新下载依赖。删除方式与恢复限制见[安全清理指南](/zh/docs/safety)。

尤其要留意全局虚拟存储：如果项目启用了它，或者全局工具正在使用 store 内的共享依赖，清空后可能需要重新安装才能运行。这种情况不要整目录删除，优先使用当前 pnpm 版本支持的整理方式；拿不准就先保留。[pnpm 的存储设置说明](https://pnpm.io/settings/node-modules#enableglobalvirtualstore)解释了这种依赖关系。

`package.json`、`pnpm-lock.yaml` 和源码都不属于缓存清理对象。项目里的 `node_modules/.pnpm` 也不是可以随手清空的临时目录，它里面有项目正在使用的依赖。

## 目录看着很大，不一定能腾出同样多的空间

pnpm 的一个特点是复用文件，而不是每个项目都单独存一份。在使用硬链接的情况下，store 和项目目录可以指向同一份磁盘数据；只删掉其中一处，另一处仍然在用，就不会释放这部分空间。[pnpm 的目录结构说明](https://pnpm.io/symlinked-node-modules-structure)有具体示例。

所以，不要把几个目录显示的容量简单相加，也别因为清完后空间变化不大，就继续删正在用的依赖。以清理前后的磁盘可用空间为准。

如果 pnpm 整理完了，硬盘还是紧张，可以用 MangoDisk 的[磁盘空间分析](/zh/docs/features/disk-analysis)查看开发目录：究竟是旧项目、构建输出，还是其他工具的缓存占得多。找到大头后再处理，比反复清同一份缓存更有效。

[下载 MangoDisk](/zh)，把分散的开发缓存放到一个界面里查看和清理。免费开源，无需注册或登录。

相关阅读：[npm 缓存清理](/zh/blog/clean-npm-cache) · [Cargo 缓存与 target 文件夹](/zh/blog/cargo-cache-vs-target-folder) · [开发者磁盘清理指南](/zh/blog/topics/developer-cleanup)
