)
npm 緩存占滿 C 盤三步把它遷到 D 盤附驗證與避坑問題場景裝了前端項目后 C 盤越來越滿一查發現npm-cache占了好幾個 GB刪了又會被重新下載填滿。其實 npm 緩存是可以「搬家」的只要把緩存目錄指到 D 盤既能釋放 C 盤空間又不用重新下載所有依賴。本教程適用Windows 10 / 11npm 5.x 及以上當前主流版本 9.x / 10.x 通用。全程用 PowerShell 命令行操作每一步都有命令、有解釋、有驗證照著抄就能跑通。一、先搞清楚npm 緩存是什么為什么占 C 盤npm 下載依賴時會把下載過的包緩存到本地磁盤。下次安裝同一個包時直接復用緩存安裝速度飛快、也省流量。這就是 npm 的「本地緩存機制」。但代價是緩存默認放在系統盤C 盤。裝的項目越多、依賴越重比如 node_modules 動輒幾百 MB 的前端工程緩存就會越滾越大通常幾個 GB嚴重的能到十幾 GB。不同 npm 版本默認緩存位置不同Windowsnpm 版本默認緩存目錄npm 5.x 及以上主流C:\Users\你的用戶名\AppData\Local\npm-cachenpm 4.x 及更早舊版C:\Users\你的用戶名\AppData\Roaming\npm-cache注意AppData默認是隱藏文件夾資源管理器里直接找可能看不到用命令行最方便。遷移思路在 D 盤建一個新緩存目錄 → 把 npm 的緩存路徑配置改成 D 盤 → 把 C 盤舊緩存復制過去可保留加速→ 驗證后清掉 C 盤舊緩存。二、遷移前先確認緩存位置和大小打開 PowerShell按Win X→ 選擇「Windows PowerShell」或「終端」依次執行下面命令做到心里有數。2.1 查看當前緩存路徑npm config get cache正常情況下會輸出類似C:\Users\你的用戶名\AppData\Local\npm-cache2.2 查看緩存占了多大空間把命令里的路徑替換成上面查到的實際路徑(Get-ChildItemC:\Users\你的用戶名\AppData\Local\npm-cache-Recurse-Force-ErrorAction SilentlyContinue|Measure-Object-Property Length-Sum).Sum/1GB輸出結果就是緩存占用的GB 數比如3.4表示約 3.4 GB。2.3 用 npm 自帶的校驗命令看緩存npm cache verify這個命令會校驗緩存完整性并輸出緩存內容總量、存放路徑等信息跑完如果發現「孤兒緩存」它還會順手清理掉。記下上面查到的當前緩存路徑和大小后面復制和清理都要用到。三、正式遷移四步走全程可復制步驟 1在 D 盤新建緩存目錄在 D 盤建一個專門的目錄例如D:\npm-cache名字隨意好記就行New-Item-ItemType Directory-PathD:\npm-cache-Force建議建在 D 盤根目錄下路徑越短越好記也避免中文或空格路徑帶來的坑。步驟 2把 npm 緩存路徑改到 D 盤這一步是核心三種方式任選一種推薦方式 A。方式 A推薦一條命令修改用戶級配置npm configsetcacheD:\npm-cache這條命令會把cacheD:\npm-cache寫入用戶級配置文件.npmrc位于C:\Users\你的用戶名\.npmrc對當前用戶的所有項目全局生效。方式 B直接編輯.npmrc文件找到并打開C:\Users\你的用戶名\.npmrc沒有就新建一個添加一行cacheD:\npm-cache保存即可效果與方式 A 完全一樣。方式 C設置環境變量適合要全自動/腳本化在 PowerShell 里執行寫入用戶級環境變量永久生效setx npm_config_cacheD:\npm-cache注意setx設置的變量需要重開終端窗口或重新登錄才會生效不像方式 A/B 即時生效。改完先驗證無論用哪種方式npm config get cache輸出變成D:\npm-cache就說明配置生效了。配置優先級小知識npm 配置從高到低是「命令行參數 環境變量 項目.npmrc 用戶.npmrc 全局.npmrc 內置默認」。所以如果你的某個項目里自己寫了一份.npmrc且也設置了cache那項目內的配置會覆蓋用戶級配置這一點在「常見問題」里會再講。步驟 3把 C 盤舊緩存「搬家」到 D 盤保留加速強烈推薦如果直接改路徑新緩存是空的下次安裝所有包都要重新下載。為了不浪費之前的緩存加速把 C 盤舊緩存整個復制到 D 盤新目錄即可——npm 緩存的_cacache目錄格式是通用的直接復制就能用。推薦用robocopyWindows 自帶速度快、支持斷點續傳、報錯信息清晰robocopyC:\Users\你的用戶名\AppData\Local\npm-cacheD:\npm-cache/E/COPY:DAT/R:1/W:1參數說明/E復制所有子目錄含空目錄/COPY:DAT復制數據、屬性、時間戳/R:1 /W:1單個文件失敗最多重試 1 次、等待 1 秒避免卡住不想用 robocopy也可以用 PowerShell 原生命令Copy-Item-PathC:\Users\你的用戶名\AppData\Local\npm-cache\*-DestinationD:\npm-cache-Recurse-Force穩妥原則先復制、確認新緩存可用后再刪舊的不要一開始就Move-Item直接移動。緩存目錄里可能有正在被 npm 占用的文件直接移動容易出問題。步驟 4驗證新緩存可用再清理 C 盤舊緩存校驗新緩存讓 npm 掃描一遍 D 盤緩存npm cache verify看到它掃描D:\npm-cache且無報錯說明緩存搬家成功。裝個包實測隨便找個目錄或現有項目執行npm install確認正常下載安裝、不報權限錯誤。確認無誤后清掉 C 盤舊緩存。兩條路選一條npm cache clean--force或直接刪除舊目錄更徹底推薦:Remove-Item-PathC:\Users\你的用戶名\AppData\Local\npm-cache-Recurse-Force看效果再看一眼 C 盤可用空間應該多出來好幾個 GBGet-PSDriveC|Select-ObjectUsed,Free到這一步遷移就完成了。四、常見問題FAQ改完配置但npm config get cache還是舊路徑① 確認是在當前用戶下執行不要用管理員終端改完又用普通終端看② 檢查是否有項目級.npmrc覆蓋在項目根目錄執行npm config get cache會優先讀項目配置③ 用方式 C 環境變量的要重開終端。復制完緩存第一次安裝還是全部重新下載正常現象。npm 緩存存在版本兼容問題——如果你新舊 npm 大版本跨度大比如從 npm 6 直接升到 npm 10舊緩存可能不被識別npm 會重建緩存重新下載一次即可之后就好了。不用糾結緩存本來就是「越快越好丟了也不心疼」。npx 的臨時包緩存也會跟著遷走嗎會。npx 臨時下載的包緩存在 cache 目錄下的_npx子目錄里會隨整個緩存目錄一起搬走。遷了緩存之前全局安裝的包npm i -g會丟嗎不會。全局包安裝在另一個位置由npm config get prefix決定一般是C:\Users\用戶名\AppData\Roaming\npm和緩存目錄無關互不影響。D 盤目錄沒有寫權限安裝報 EACCES / EPERM檢查 D 盤是不是有寫入限制如某些公司電腦 D 盤被策略保護。確認后重新執行npm config set cache D:\npm-cache指向一個有寫權限的路徑即可。緩存還是太大怎么辦①npm cache verify定期跑一跑能自動清理損壞/孤兒緩存② 真不需要緩存加速了npm cache clean --force直接清空npm 每次重新下載國內可配合設置 registry 鏡像下載也不慢。我想把緩存放回 C 盤怎么辦反向操作即可npm config set cache C:\Users\你的用戶名\AppData\Local\npm-cache再把 D 盤緩存復制回去然后刪掉 D 盤那份。總結npm 緩存默認在 C 盤的AppData\Local\npm-cache日積月累能吃掉好幾個 GB。遷移只需四步——① D 盤新建目錄 → ②npm config set cache改路徑或改.npmrc/ 環境變量→ ③robocopy把舊緩存復制過去 → ④ 驗證后刪掉 C 盤舊緩存。核心就一條命令npm config set cache D:\npm-cache重點是記得把舊緩存復制過去別浪費之前的下載加速。