如何在 Mac 安全清除 npm 快取
AskClean 團隊 · 更新於 2026-08-05
先執行 npm config get cache 找出目前快取,測量該路徑,再用 npm cache verify 驗證與回收不需要的資料。只有確實需要空間且接受之後重新下載時,才執行 npm cache clean --force;它不會刪除 node_modules、package.json 或 lockfile。

npm 快取不是 node_modules 或專案狀態
npm 的內容定址式共享下載快取在 macOS 預設位於 ~/.npm,但設定可能改到別處;node_modules 是個別專案已安裝的依賴樹,package.json 與 package-lock.json 則是重建輸入,都不屬於快取。舊的 npm-shrinkwrap.json 同樣是專案檔案,但 npm v12 已不再讀取,必須重新命名為 package-lock.json 才能供目前 npm 重裝使用。
先找出實際路徑,再執行驗證
不要因為 ~/.npm 存在就假設它仍是作用中的快取;npmrc、環境變數或工具設定都可能改變位置。先記錄 npm --version,以 npm config get cache 的輸出為準,用 du -sh 加上該確切路徑測量,接著停止所有會讀寫快取的 npm 處理程序並執行 npm cache verify。verify 會檢查索引與內容完整性,並回收不再需要的資料,不需要 --force;完成後重新測量,例行維護通常到此就夠了。
- 執行 npm --version 與 npm config get cache,複製輸出路徑並確認它是快取,而不是專案目錄。
- 在 du -sh 後接上剛才的確切路徑,測量目前大小與 macOS 可用空間;路徑含空格時要加引號。
- 停止正在執行的 npm install、npm ci、npm exec 或 npm publish 等作業,再執行 npm cache verify 並保留摘要與錯誤。
- 重新測量;只有快取仍大到值得清且之後可連網時,才確認 package.json、package-lock.json 與私有套件庫設定未變,然後執行 npm cache clean --force。
- 視需要再次執行 npm cache verify,重新測量同一路徑,並以原本的依賴關係圖測試代表性專案。
不要把未驗證路徑貼進 rm -rf,也不要同時刪除 lockfile。一次改變快取與依賴解析,會失去診斷原始問題所需的對照。
只有接受重新下載代價才完整清除
npm cache clean --force 適合已量到大型快取、現在確實需要空間,或 verify 無法處理的快取專屬故障;--force 只加在這個命令,不要設成永久 npm 設定。清除會丟掉可重用下載,之後安裝更慢,且需要套件庫、私有套件主機、Git、Proxy 伺服器與網路都可用;離線或已從上游消失的套件可能無法再取得。它不會卸載 node_modules 或改寫 lockfile,也不能修好 ERESOLVE、憑證、Node 引擎版本、原生模組建置或生命週期指令碼問題。
重新測量並驗證實際專案
清除後再次執行 npm config get cache,測量同一路徑與 macOS 可用空間;若要重建快取結構,可再執行 npm cache verify。保留原本的 package.json 與 lockfile,用一個代表性專案的正常安裝、建置或測試流程,驗證連線、離線作業與私有套件庫需求;相同錯誤再次出現就停止重複清除快取。AskClean 目前只辨識預設的 ~/.npm,會將整個共享快取作為一個項目移到垃圾桶;自訂路徑仍須透過 npm 確認。
清理決策與風險對照
找出並測量 npm 實際使用的下載快取,先執行驗證,確有必要才清除,同時保護 node_modules、package.json 與 lockfile。
| 項目或操作 | 檢查位置 | 刪除後果 |
|---|---|---|
| npm 快取不是 node_modules 或專案狀態 | npm config get cache | npm 的內容定址式共享下載快取在 macOS 預設位於 ~/.npm,但設定可能改到別處;node_modules 是個別專案已安裝的依賴樹,package.json 與 package-lock.json 則是重建輸入,都不屬於快取。舊的 npm-shrinkwrap.json 同樣是專案檔案,但 npm v12 已不再讀取,必須重新命名為 package-lock.json 才能供目前 npm 重裝使用。 |
| 先找出實際路徑,再執行驗證 | npm cache verify | 不要因為 ~/.npm 存在就假設它仍是作用中的快取;npmrc、環境變數或工具設定都可能改變位置。先記錄 npm --version,以 npm config get cache 的輸出為準,用 du -sh 加上該確切路徑測量,接著停止所有會讀寫快取的 npm 處理程序並執行 npm cache verify。verify 會檢查索引與內容完整性,並回收不再需要的資料,不需要 --force;完成後重新測量,例行維護通常到此就夠了。 |
| 只有接受重新下載代價才完整清除 | npm cache clean --force | npm cache clean --force 適合已量到大型快取、現在確實需要空間,或 verify 無法處理的快取專屬故障;--force 只加在這個命令,不要設成永久 npm 設定。清除會丟掉可重用下載,之後安裝更慢,且需要套件庫、私有套件主機、Git、Proxy 伺服器與網路都可用;離線或已從上游消失的套件可能無法再取得。它不會卸載 node_modules 或改寫 lockfile,也不能修好 ERESOLVE、憑證、Node 引擎版本、原生模組建置或生命週期指令碼問題。 |
| 重新測量並驗證實際專案 | install + offline/private-registry check | 清除後再次執行 npm config get cache,測量同一路徑與 macOS 可用空間;若要重建快取結構,可再執行 npm cache verify。保留原本的 package.json 與 lockfile,用一個代表性專案的正常安裝、建置或測試流程,驗證連線、離線作業與私有套件庫需求;相同錯誤再次出現就停止重複清除快取。AskClean 目前只辨識預設的 ~/.npm,會將整個共享快取作為一個項目移到垃圾桶;自訂路徑仍須透過 npm 確認。 |
常見問題
npm cache clean --force 在 Mac 上安全嗎?
它不會刪除專案原始碼與套件資訊清單,但會移除可重用的下載內容。先確認 npm 指向真正的快取、執行 verify、停止 npm 處理程序,並接受後續需要網路與時間的代價。
應該用 npm cache verify 還是 npm cache clean?
一律先用 npm cache verify;它會驗證完整性並回收不需要的資料,同時保留有效內容。只有實測需要空間或 verify 無法修復快取專屬問題時,才用 npm cache clean --force。
清除 npm 快取會刪除 package-lock.json 嗎?
不會。package-lock.json 與 package.json 都是專案檔案。npm v12 已忽略 npm-shrinkwrap.json,因此舊專案要把它重新命名為 package-lock.json;快取維護不應改變依賴解析。
參考來源