AskCleanAskClean問淨

如何在 Mac 安全清除 npm 快取

AskClean 團隊 · 更新於 2026-08-05

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

等角視角的套件封存檔經過帶有勾號盾牌的 npm 快取,旁邊的專案檔案受到保護
npm 快取存放可重用的下載內容;專案的套件資訊清單、lockfile 與已安裝的 node_modules 是不同資料。

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;完成後重新測量,例行維護通常到此就夠了。

  1. 執行 npm --version 與 npm config get cache,複製輸出路徑並確認它是快取,而不是專案目錄。
  2. 在 du -sh 後接上剛才的確切路徑,測量目前大小與 macOS 可用空間;路徑含空格時要加引號。
  3. 停止正在執行的 npm install、npm ci、npm exec 或 npm publish 等作業,再執行 npm cache verify 並保留摘要與錯誤。
  4. 重新測量;只有快取仍大到值得清且之後可連網時,才確認 package.json、package-lock.json 與私有套件庫設定未變,然後執行 npm cache clean --force。
  5. 視需要再次執行 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 cachenpm 的內容定址式共享下載快取在 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 --forcenpm 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;快取維護不應改變依賴解析。

參考來源

繼續清理開發者儲存