如何在 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 也算進去。舊專案的那些,可以在 Finder 中移到垃圾桶,或用 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。