WTMemory 教學

如何清除 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/_cacachenpm config get cachenpm cache clean --force
pnpm~/Library/pnpm/storepnpm store pathpnpm store prune
Yarn 1~/Library/Caches/Yarnyarn cache diryarn cache clean
Yarn 2+~/.yarn/berry/cacheyarn config get cacheFolderyarn cache clean --all
Bun~/.bun/install/cachebun pm cachebun pm cache rm
Cargo~/.cargo/registry、~/.cargo/gitecho $CARGO_HOME刪除 registry/cache 和 registry/src
Gradle~/.gradle/cachesecho $GRADLE_USER_HOME停止 daemon,再刪除 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,有些 repository 則改用專案內的 .yarn/cache。要同時清除全域和目前專案的快取:

yarn cache clean --all

如果某個 repository 為了 zero-installs 把 .yarn/cache 提交進 git,不要手動刪除它:它是 repo 的一部分。

怎麼清除 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 daemon,因為它們會讓快取裡的檔案保持開啟:

./gradlew --stop
rm -rf ~/.gradle/caches

下次建置會重新下載相依套件並重建 transform,在 Android 專案上可能要花一段時間。~/.gradle/wrapper/dists 為你用過的每個 wrapper 版本保存一份完整的 Gradle 發行版;不再用來建置的舊版本可以刪除。請保留 ~/.gradle/gradle.properties,裡面常有簽署和 repository 的憑證。

怎麼找出佔用空間的 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。

哪些東西不該刪?

清除快取會讓 Mac 變快嗎?

不會。它只會釋放磁碟空間,偶爾也能修好損毀的下載檔。在快取重新填滿之前,下次安裝或建置會比較慢,離線安裝也會無法使用。

從選單列檢視開發者快取

WTMemory 會掃描支援的開發者快取位置,包括 npm、pnpm、Yarn、Bun、Cargo 和 Gradle 快取,並顯示每一項的說明和估計大小。你可以先在 Finder 中顯示任何項目。檢視功能免費。

有了 Pro,你可以挑選個別快取、檢視刪除後的影響,再由 WTMemory 把它們移到垃圾桶。不會自動選取任何東西,也不會永久刪除任何東西;要不要清空垃圾桶由你決定。它只處理這些快取:原始碼不在範圍內,你的專案(包括其中的 node_modules)也不會被清理,那些請用上面的 find 指令。請先關閉執行中的套件管理工具和建置。WTMemory 支援 macOS 12 以上版本,Apple Silicon 與 Intel 皆可使用;Pro 一次付清 $9 USD,最多可用於三台 Mac,並提供七天試用。

下載 WTMemory

常見問題

清除 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 把它們列出來。

相關教學

完整的 WTMemory 使用說明與授權協助