每个包管理器都会保存其下载内容的本地缓存,并且大多数包管理器从不自行清理它。经过几年的项目,这些缓存可以轻松达到数十 GB。好信息是,几乎所有这些都可以安全地清除,因为这些工具会再次下载它们需要的内容。
**开始之前:**停止运行构建、安装和开发服务器。在工具使用缓存时清除缓存可能会导致令人困惑的错误。
查看空间在哪里
此只读命令显示常见缓存文件夹的大小:
du -sh ~/Library/Caches/Homebrew ~/.npm ~/Library/pnpm ~/Library/Caches/pip ~/Library/Caches/uv ~/.gradle/caches ~/Library/Caches/CocoaPods ~/.pub-cache ~/.cargo/registry 2>/dev/null
不存在的文件夹将被跳过。
Homebrew
Homebrew 保留下载的预编译软件包和旧版本的 formula 软件包。用以下方法清理它们:
brew cleanup
要同时删除所有缓存的下载,而不仅仅是旧的:
brew cleanup --prune=all
先运行 brew cleanup -n,预览将删除哪些内容;此命令不会实际删除文件。
npm、Yarn 和 pnpm
npm cache clean --force
yarn cache clean
pnpm store prune
npm cache verify 检查并整理缓存而不清除所有内容。 pnpm store prune 删除任何项目未引用的包,这对于项目之间共享的 pnpm 存储来说是安全的。
旧项目中的 node_modules 文件夹
每个 JavaScript 项目都有自己的 node_modules,通常有数百兆字节。要将它们列在项目文件夹中而不删除任何内容:
find ~/code -name node_modules -type d -prune -exec du -sh {} + 2>/dev/null
删除您不积极参与的项目中的 node_modules。运行 npm install 会将其恢复。
Python:pip 和 uv
pip cache purge
uv cache clean
uv cache prune 是一个更温和的选项,仅删除未使用的条目。旧项目中的虚拟环境(.venv 文件夹)也可能很大,并且可以从项目的依赖清单文件重新创建。
Gradle
Gradle 的依赖项缓存位于 ~/.gradle/caches 中。停止所有正在运行的守护进程,然后将其删除:
./gradlew --stop
rm -rf ~/.gradle/caches
Gradle 在下一个构建时再次下载依赖项。 Android Studio 用户还可以在 设置 > 语言和框架 > Android SDK 中删除旧的 Android SDK 平台和系统映像,并在 设备管理器 中删除旧的模拟器。
CocoaPods
pod cache clean --all
这会清除下载的 Pod。您项目的 Pods 文件夹和 Podfile.lock 不受影响。
Dart 和 Flutter
dart pub cache clean
这会删除 pub 缓存中的所有内容,包括全局激活的工具,您需要再次激活它们。在项目中运行 flutter pub get 会再次获取其包。项目中的 flutter clean 删除其构建输出。
Rust (Cargo)
在您不参与的项目中运行 cargo clean 来删除其 target 文件夹,这些文件夹通常是 Rust 项目中占用空间最多的部分。 ~/.cargo/registry中的软件包注册索引缓存可以删除并重新下载。
Docker
Docker Desktop 将镜像、容器、卷和构建缓存存储在单个磁盘镜像中,因此其存储空间不会因删除 Finder 中的文件而缩小。
-
查看什么在使用空间:
docker system df -
删除已停止的容器、未使用的网络、悬空镜像和构建缓存:
docker system prune添加
-a以同时删除容器未使用的所有映像。 不要添加--volumes除非您确定:卷保存持久数据,例如本地数据库。 -
在Docker Desktop > Settings > Resources中,您可以查看并限制磁盘映像大小。
Xcode
Xcode 的 DerivedData、档案、设备支持文件和模拟器都包含在我们单独的清除 Xcode 存储 指南中。
常见问题
清除 npm 缓存安全吗?
是的。 npm 根据需要再次下载包。首先停止任何正在运行的安装。您的项目及其 node_modules 文件夹不受影响。
docker system prune 会删除我的数据吗?
默认情况下,它会删除已停止的容器、未使用的网络、悬空镜像和构建缓存,但不会删除卷。通常保存数据库的卷只有在添加 --volumes 时才会被删除。
我可以删除 ~/.gradle/caches 吗?
是的,在停止 Gradle 守护进程之后。 Gradle 在下一个构建时再次下载依赖项,这需要时间和带宽。