如何在 Mac 上清理 npm、Yarn 和 pnpm 缓存
2026年10月13日更新
在 Mac 上清理 npm 缓存,运行 npm cache clean --force;pnpm 运行 pnpm store prune,Yarn 1 运行 yarn cache clean,Yarn 2 及以上运行 yarn cache clean --all。这些都是下载缓存,删掉是安全的:唯一的代价是下次安装要重新下载包。
WTMemory 是一款查看功能免费的 macOS 菜单栏 App,可以在你清理之前把这些缓存的大小并排列出来。文末有详细介绍;下面的命令只需要终端。
包缓存占了多少空间?
先测量,看看哪个缓存值得清。以下是 macOS 上的默认位置:
du -sh ~/.npm ~/Library/pnpm/store ~/Library/Caches/Yarn ~/.yarn/berry/cache \
~/.bun/install/cache ~/.cargo/registry ~/.cargo/git ~/.gradle/caches 2>/dev/null
如果你通过配置或环境变量改过位置,直接问工具本身:
| 工具 | macOS 上的默认位置 | 查询命令 | 清理方法 |
|---|---|---|---|
| npm | ~/.npm/_cacache | npm config get cache | npm cache clean --force |
| pnpm | ~/Library/pnpm/store | pnpm store path | pnpm store prune |
| Yarn 1 | ~/Library/Caches/Yarn | yarn cache dir | yarn cache clean |
| Yarn 2+ | ~/.yarn/berry/cache | yarn config get cacheFolder | yarn cache clean --all |
| Bun | ~/.bun/install/cache | bun pm cache | bun pm cache rm |
| Cargo | ~/.cargo/registry、~/.cargo/git | echo $CARGO_HOME | 删除 registry/cache 和 registry/src |
| Gradle | ~/.gradle/caches | echo $GRADLE_USER_HOME | 停止守护进程,删除 caches |
Mac 上怎么清理 npm 缓存?
npm cache clean --force
npm 把下载的 tarball 保存在 ~/.npm/_cacache 下的内容寻址存储中。从 npm 5 开始,缓存会自行检查完整性,所以 npm 不加 --force 就拒绝清理。如果你只是怀疑缓存损坏,npm cache verify 会回收不需要的数据并校验其余部分,而不会把所有东西都扔掉。
~/.npm 中还有两个邻居也可以安全删除:_npx 存放 npx 拉取的包,_logs 存放调试日志。清理缓存不会影响任何项目,也不会影响全局安装的包。
怎么清理 pnpm store?
pnpm store prune
pnpm 在全局 store 中为每个包版本只保存一份,再通过硬链接把文件链接到各个项目的 node_modules。prune 会删除已经没有任何项目引用的包。安装进行中时不要运行它。运行 pnpm store path 查看确切的文件夹;store 目录名里带有版本号(例如 v10),pnpm 大版本升级时会变化,所以升级后可能会留下一个旧版本的文件夹。
由于硬链接的存在,对 store 和项目分别运行 du 会把同样的字节算两遍;只要项目还链接着这些文件,删除整个 store 也腾不出多少空间。先 prune,再删除你不再开发的项目中的 node_modules。
怎么清理 Yarn 缓存?
先用 yarn --version 查看版本。Yarn 1(classic)使用 ~/Library/Caches/Yarn:
yarn cache clean
Yarn 2 及以上(Berry)默认把全局缓存放在 ~/.yarn/berry/cache,有些仓库则改用项目内的 .yarn/cache。要同时清理全局缓存和当前项目的缓存:
yarn cache clean --all
如果某个仓库为了零安装(zero-installs)把 .yarn/cache 提交到了 git,不要手动删除它:它是仓库的一部分。
怎么清理 Bun 缓存?
bun pm cache rm
除非 BUN_INSTALL_CACHE_DIR 另有指定,Bun 会把下载的包存放在 ~/.bun/install/cache。bun pm cache 会输出路径。不要动 ~/.bun/bin,bun 可执行文件本身就在那里。
怎么清理 Cargo 缓存?
Cargo 把下载的 crate 压缩包存放在 ~/.cargo/registry/cache,解压后的源码存放在 ~/.cargo/registry/src。两者都可以安全删除,Cargo 会在下次构建时重新获取:
rm -rf ~/.cargo/registry/cache ~/.cargo/registry/src
~/.cargo/git/checkouts 存放 git 依赖,也可以删。不要删除 ~/.cargo/bin(用 cargo install 安装的工具)或 ~/.cargo/credentials.toml。对 Rust 来说,更大的收获通常是各项目的 target 文件夹,在项目中运行 cargo clean 即可清理。
怎么清理 Gradle 缓存?
先停止 Gradle 守护进程,因为它们会一直打开缓存中的文件:
./gradlew --stop
rm -rf ~/.gradle/caches
下次构建会重新下载依赖并重建 transforms,在 Android 项目上可能要花不少时间。~/.gradle/wrapper/dists 为你用过的每个 wrapper 版本都保存了一份完整的 Gradle 发行版;删掉不再使用的旧版本即可。请保留 ~/.gradle/gradle.properties,里面经常有签名和仓库凭据。
怎么找出占空间的 node_modules 文件夹?
在项目很多的 Mac 上,node_modules 文件夹通常比全局缓存还大。列出它们及其大小,把 ~/code 换成你存放项目的位置:
find ~/code -name node_modules -type d -prune -exec du -sh {} + | sort -h
-prune 让 find 不再深入每个 node_modules,这样嵌套的依赖文件夹不会被单独列出,扫描也更快。删除你当前没在开发的项目里的那些:
rm -rf ~/code/old-project/node_modules
以后可以用项目中的 lockfile,通过 npm ci、pnpm install --frozen-lockfile 或 yarn install --immutable 恢复出完全相同的依赖树。如果想要一个可以勾选的交互式列表,npx npkill 会扫描文件夹并删除你选中的 node_modules。
哪些东西不要删?
~/.npmrc、~/.yarnrc.yml等配置文件:里面可能有镜像仓库的认证令牌。很多国内开发者还在这里配置了 npmmirror 等镜像源,删掉后安装可能会突然变慢。~/.nvm等 Node 版本管理器,以及全局安装目录:这些是已安装的工具,不是缓存。- 仓库中的 lockfile 和已提交的
.yarn/cache文件夹。 - 安装或构建正在进行时,缓存中的任何内容。
清理缓存能让 Mac 变快吗?
不能。它只能释放磁盘空间,偶尔修复一下损坏的下载。在缓存重新填满之前,下一次安装或构建会更慢,离线安装也无法使用。
在菜单栏里查看开发缓存
WTMemory 会扫描受支持的开发缓存位置,包括 npm、pnpm、Yarn、Bun、Cargo 和 Gradle 缓存,并为每一项显示说明和估算大小。你可以先在访达中显示任意项目。查看功能免费。
升级 Pro 后,你可以挑选单个缓存、核对删除后果,然后由 WTMemory 将它们移到废纸篓。不会自动选中任何内容,也不会永久删除任何内容;是否清倒废纸篓由你决定。它只处理这些缓存:源代码不在范围内,你的项目(包括其中的 node_modules)也不会被清理,这些请用上面的 find 命令处理。请先关闭正在运行的包管理器和构建。WTMemory 支持 macOS 12 及以上版本,兼容 Apple 芯片和 Intel 机型;Pro 一次性 $9 USD,最多三台 Mac,提供七天试用。
常见问题
清理 npm 缓存安全吗?
安全。npm 缓存是已下载包的内容寻址副本。清理它绝不会破坏已安装的项目;下次安装会重新下载包,在缓存重新填满之前离线安装无法使用。
为什么 npm cache clean 需要 --force?
从 npm 5 开始,缓存会自我校验并修复损坏,所以 npm 认为清理缓存没有必要,要求你用 --force 确认。npm cache verify 是更温和的选择。
删除 pnpm store 会弄坏我的项目吗?
pnpm store prune 只删除没有任何项目引用的包,所以是安全的。删除整个 store 也不会损坏现有的 node_modules,因为文件是硬链接,但下次 pnpm install 需要重新下载所有内容。
清理缓存能让 Mac 变快吗?
不能。它只能释放磁盘空间。在缓存重新填满之前,接下来的安装和构建会更慢。
缓存和 node_modules,通常哪个更大?
在项目很多的机器上,项目里的 node_modules 文件夹和 Rust 的 target 文件夹加起来通常比全局缓存还大。用 find 配合 du 列出它们。