如何在 Mac 上查找并删除旧的 node_modules 文件夹和包缓存
每个 JavaScript 项目都带着自己的 node_modules,通常有 200 MB 到 1 GB,而包管理器还会在缓存里把所有东西再存一份。几个月前就做完的项目,这些东西也都还在。
一句话:node_modules 文件夹和包缓存都可以安全删除:npm install(或 pnpm、yarn、bun)会按 lockfile 原样装回来。缓存请用各个包管理器自己的清理命令。
怎么找出所有 node_modules 文件夹?
把命令指向你存放代码的文件夹。它会列出每个 node_modules 及其大小,最大的排在最后:
find ~/Projects -type d -name node_modules -prune -exec du -sh {} + 2>/dev/null | sort -h
-prune 让它不去重复统计嵌套在其他 node_modules 里的 node_modules。旧项目的可以在“访达”里移到废纸篓,或者用 rm -rf 删除(无法撤销)。
删除 node_modules 安全吗?
安全。里面是下载来的包,而你的 package.json 和 lockfile 记录了具体是哪些。在项目里运行 npm install 就能恢复。两个例外:你在 node_modules 里手动改过的包(应改用 patch-package 或包管理器自带的 patch 命令),以及需要离线工作的时候。
哪些包缓存可以清理,怎么清?
- npm(
~/.npm/_cacache):npm cache clean --force - pnpm(
~/Library/pnpm/store):pnpm store prune会删除没有任何项目使用的包 - Yarn(
~/Library/Caches/Yarn、~/.yarn/berry/cache):yarn cache clean - Bun(
~/.bun/install/cache):bun pm cache rm - Homebrew(
~/Library/Caches/Homebrew):brew cleanup - pip(
~/Library/Caches/pip):pip cache purge;uv(~/.cache/uv):uv cache clean - Go:
go clean -cache -modcache - CocoaPods:
pod cache clean --all;Gradle(~/.gradle/caches)、Maven(~/.m2/repository)和 Cargo(~/.cargo/registry)可以直接移到废纸篓,需要时会重新下载 - Playwright 浏览器(
~/Library/Caches/ms-playwright):用npx playwright install重新安装
之后每个项目再安装时,会重新下载需要的东西,所以清理后的第一次安装会慢一些。
那构建产物文件夹呢?
构建产物同样会自动重新生成:JavaScript 项目里的 .next、.turbo、dist 和 build,Rust 和 Maven 里的 target,Swift 包里的 .build,CocoaPods 项目里的 Pods(用 pod install 恢复)。
哪些应该保留?
- Python 虚拟环境(
.venv):重建出来的可能不一样,因为手动安装的包和没有锁定版本的依赖不会原样回来。 - 你正在用的 Node.js 版本(nvm 或 fnm 中)。
~/.nvm/versions/node里没有项目需要的旧版本可以删掉。 - 有未提交更改的项目:要删除比依赖更大的东西之前,先看一下
git status。