跳到主要内容
Mole
概览 功能 口碑 定价 常见问题 博客
EnglishEN 简体中文中 繁體中文繁 日本語日 한국어한 FrançaisFR DeutschDE ItalianoIT EspañolES
立即购买 下载
首页/博客

如何清理开发工具缓存,又不破坏构建

开发者清理发布于 2026年7月30日约 3 分钟

开发者存储分散在软件包下载、构建输出、SDK、本地数据库和每个项目的依赖树中。有些内容可以重建,有些依赖锁文件和未来可能消失的软件源,还有些是唯一的本地数据。

安全清理必须先证明发现的是哪一种,而不是把所有点号目录都当作缓存。

各工具的全局缓存

每个软件包管理器都有可以直接测量的全局存储:

du -sh ~/.npm ~/.cargo ~/.cache/pip ~/Library/Caches/pip ~/.gradle 2>/dev/null | sort -h

这些只是默认位置,不是保证。能向工具查询时,应读取实际配置路径,例如 npm config get cache、python -m pip cache dir 和 pnpm store path。

  • npm 默认把下载缓存放在 ~/.npm。先运行 npm cache verify。npm 把缓存描述为可以自我修复,因此 npm cache clean --force 主要用于明确的空间回收或故障排除。
  • Cargo 会在 ~/.cargo 下保存注册表和 git 检出,但 Cargo home还可能包含已安装二进制文件、配置、软件包记录与注册表凭据。当前 Cargo 会在构建和获取命令期间定期删除未使用的全局缓存。让内建策略工作,或检查准确的缓存子目录,永远不要整体删除 ~/.cargo。
  • pip 默认把 wheel 和 HTTP 响应缓存放在 ~/Library/Caches/pip。python -m pip cache info 会报告实际位置与大小,python -m pip cache purge则会清空缓存。
  • pnpm 与 yarn 有各自的存储。pnpm store prune 和 yarn cache clean用于清理未引用或缓存的软件包。先确认正在使用的软件包管理器版本,因为存储布局、本地与全局缓存行为会变化。
  • Gradle 与 Maven 的 ~/.gradle、~/.m2 在 Android 和 JVM 开发电脑上可能很大。Gradle 已经会执行定期缓存清理,手动检查前先停止守护进程。Maven 仓库可能包含本地构建或无法重新下载的私有产物,不要默认删除整个仓库。

重建成本可能是一轮大型下载、原生代码重新编译,甚至是在某个注册表版本消失后无法复现历史构建。把存储称为可重建之前,先确认锁文件和每个依赖的来源。

散落在各项目中的 node_modules

更大的意外往往不是单个缓存,而是每个 JavaScript 项目中的 node_modules。每份目录通常有 200 至 500 MB,十个旧项目就能隐藏数 GB。可以查找并显示大小:

find ~/www ~/Projects -name node_modules -type d -prune -exec du -sh {} + 2>/dev/null

把示例根目录换成实际保存项目的位置。-prune 会阻止 find 继续进入匹配到的依赖树,-exec 则能安全处理路径中的空格和特殊字符。

只有源代码、锁文件、软件包管理器版本、注册表访问和必要的原生工具链仍然存在,项目才能重建依赖。保留这些输入后,优先使用与锁文件匹配的命令,例如 npm ci。

不要删除这些内容

软件包缓存可能可以替换,但旁边两类内容不行。

项目源代码与锁文件,如 package.json、package-lock.json 和 Cargo.lock,不是缓存,而是构建定义,绝不能扫掉。正在使用的全局共享存储,比如 pnpm 内容寻址存储,即使删除后可以重新下载,在安装中途清理也可能损坏。确保没有构建或安装正在运行,再处理缓存。

内容寻址存储,以及 node_modules 为什么不同

许多软件包管理器使用内容寻址存储减少重复下载。pnpm 会全局保存每个软件包版本,再通过硬链接把它们接入各项目的 node_modules,十个项目使用同一个库时,可以共享一份磁盘内容。Cargo 与 Go 缓存也会按版本或校验和组织下载。

这种结构能保护完整性,却不能保证未来一定可用。传统 npm 安装会为每个项目具体生成一棵依赖树,pnpm 则能把项目链接到共享存储。因此,删除单个 node_modules 和清理共享存储拥有完全不同的影响范围。

左侧一个共享全局存储通过硬链接连接到多个项目,右侧同一个库被复制进每个项目的 node_modules,形成重复。
共享内容寻址存储与每个项目具体生成的依赖树,拥有不同存储成本,也拥有不同清理边界。

用地图发现,用软件包管理器清理

内容分散是发现问题。Mole「分析」页这样的矩形树图可以指出哪个项目或存储很大,但软件包管理器自己的验证、清理和 prune 命令才理解索引与引用。

用地图选择目标,再让数据所属的工具执行改变。

清理时按这个顺序

停止构建和守护进程,测量选定项目根目录,验证软件包管理器存储,并在删除依赖树前保留源代码与锁文件。使用文档中明确的 prune 命令,不要删除整个个人目录下的点号文件夹。

清空废纸篓前先重建一个项目。目标是移除可重现输出,同时保留重新生成它所需的信息。

Mole 把磁盘分析、应用维护和清理前确认放进一个原生 Mac App,系统数据仍交给 macOS 和对应应用处理。

购买 Mole 免费试用

继续阅读

  • 开发者清理如何安全清理 Homebrew约 2 分钟
  • 开发者清理如何清理 Docker for Mac,又不丢数据约 3 分钟
  • 开发者清理如何清理 Xcode,又不误删发布归档约 3 分钟

Mole · 鼴

Mac 清理、软件与状态工具。

v1.12.0 (117) · 更新日志

支持

帮助 功能文档 发布记录

法律

服务条款 隐私政策 退款政策

资源

博客 命令行版 CLI 合作推广

联系

Twitter hi@mole.fit

请认准官网 mole.fit · 避免下载到来路不明的版本

命令行版继续免费开源。