npm 缓存占满 C 盘?三步把它迁到 D 盘(附验证与避坑)
问题场景 :装了前端项目后 C 盘越来越满,一查发现
npm-cache占了好几个 GB,删了又会被重新下载填满。其实 npm 缓存是可以「搬家」的,只要把缓存目录指到 D 盘,既能释放 C 盘空间,又不用重新下载所有依赖。本教程适用:Windows 10 / 11,npm 5.x 及以上(当前主流版本 9.x / 10.x 通用)。全程用 PowerShell 命令行操作,每一步都有命令、有解释、有验证,照着抄就能跑通。
一、先搞清楚:npm 缓存是什么,为什么占 C 盘
npm 下载依赖时,会把下载过的包缓存到本地磁盘。下次安装同一个包时直接复用缓存,安装速度飞快、也省流量。这就是 npm 的「本地缓存机制」。
但代价是:缓存默认放在系统盘(C 盘)。装的项目越多、依赖越重(比如 node_modules 动辄几百 MB 的前端工程),缓存就会越滚越大,通常几个 GB,严重的能到十几 GB。
不同 npm 版本默认缓存位置不同(Windows):
| npm 版本 | 默认缓存目录 |
|---|---|
| npm 5.x 及以上(主流) | C:\Users\<你的用户名>\AppData\Local\npm-cache |
| npm 4.x 及更早(旧版) | C:\Users\<你的用户名>\AppData\Roaming\npm-cache |
注意:
AppData默认是隐藏文件夹,资源管理器里直接找可能看不到,用命令行最方便。
迁移思路:在 D 盘建一个新缓存目录 → 把 npm 的缓存路径配置改成 D 盘 → 把 C 盘旧缓存复制过去(可保留加速)→ 验证后清掉 C 盘旧缓存。
二、迁移前:先确认缓存位置和大小
打开 PowerShell(按 Win + X → 选择「Windows PowerShell」或「终端」),依次执行下面命令,做到心里有数。
2.1 查看当前缓存路径
powershell
npm config get cache
正常情况下会输出类似:
text
C:\Users\你的用户名\AppData\Local\npm-cache
2.2 查看缓存占了多大空间
把命令里的路径替换成上面查到的实际路径:
powershell
(Get-ChildItem "C:\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 自带的校验命令看缓存
powershell
npm cache verify
这个命令会校验缓存完整性,并输出缓存内容总量、存放路径等信息,跑完如果发现「孤儿缓存」,它还会顺手清理掉。
记下上面查到的当前缓存路径 和大小,后面复制和清理都要用到。
三、正式迁移(四步走,全程可复制)
步骤 1:在 D 盘新建缓存目录
在 D 盘建一个专门的目录,例如 D:\npm-cache(名字随意,好记就行):
powershell
New-Item -ItemType Directory -Path "D:\npm-cache" -Force
建议建在 D 盘根目录下,路径越短越好记,也避免中文或空格路径带来的坑。
步骤 2:把 npm 缓存路径改到 D 盘
这一步是核心,三种方式任选一种,推荐方式 A。
方式 A(推荐):一条命令修改用户级配置
powershell
npm config set cache "D:\npm-cache"
这条命令会把 cache=D:\npm-cache 写入用户级配置文件 .npmrc(位于 C:\Users\<你的用户名>\.npmrc),对当前用户的所有项目全局生效。
方式 B:直接编辑 .npmrc 文件
找到并打开 C:\Users\<你的用户名>\.npmrc(没有就新建一个),添加一行:
ini
cache=D:\npm-cache
保存即可,效果与方式 A 完全一样。
方式 C:设置环境变量(适合要全自动/脚本化)
在 PowerShell 里执行(写入用户级环境变量,永久生效):
powershell
setx npm_config_cache "D:\npm-cache"
注意:
setx设置的变量需要重开终端窗口(或重新登录)才会生效,不像方式 A/B 即时生效。
改完先验证,无论用哪种方式:
powershell
npm config get cache
输出变成 D:\npm-cache 就说明配置生效了。
配置优先级小知识 :npm 配置从高到低是「命令行参数 > 环境变量 > 项目
.npmrc> 用户.npmrc> 全局.npmrc> 内置默认」。所以如果你的某个项目里自己写了一份.npmrc且也设置了cache,那项目内的配置会覆盖用户级配置,这一点在「常见问题」里会再讲。
步骤 3:把 C 盘旧缓存「搬家」到 D 盘(保留加速,强烈推荐)
如果直接改路径,新缓存是空的,下次安装所有包都要重新下载 。为了不浪费之前的缓存加速,把 C 盘旧缓存整个复制到 D 盘新目录即可------npm 缓存的 _cacache 目录格式是通用的,直接复制就能用。
推荐用 robocopy(Windows 自带,速度快、支持断点续传、报错信息清晰):
powershell
robocopy "C:\Users\你的用户名\AppData\Local\npm-cache" "D:\npm-cache" /E /COPY:DAT /R:1 /W:1
参数说明:
/E:复制所有子目录(含空目录)/COPY:DAT:复制数据、属性、时间戳/R:1 /W:1:单个文件失败最多重试 1 次、等待 1 秒,避免卡住
不想用 robocopy,也可以用 PowerShell 原生命令:
powershell
Copy-Item -Path "C:\Users\你的用户名\AppData\Local\npm-cache\*" -Destination "D:\npm-cache" -Recurse -Force
稳妥原则 :先复制 、确认新缓存可用后再删旧的,不要一开始就
Move-Item直接移动。缓存目录里可能有正在被 npm 占用的文件,直接移动容易出问题。
步骤 4:验证新缓存可用,再清理 C 盘旧缓存
-
校验新缓存(让 npm 扫描一遍 D 盘缓存):
powershellnpm cache verify看到它扫描
D:\npm-cache且无报错,说明缓存搬家成功。 -
装个包实测 :随便找个目录(或现有项目)执行
npm install,确认正常下载安装、不报权限错误。 -
确认无误后,清掉 C 盘旧缓存。两条路选一条:
powershellnpm cache clean --force或直接删除旧目录(更彻底,推荐):
powershellRemove-Item -Path "C:\Users\你的用户名\AppData\Local\npm-cache" -Recurse -Force -
看效果:再看一眼 C 盘可用空间,应该多出来好几个 GB:
powershellGet-PSDrive C | Select-Object Used, 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",重点是记得把旧缓存复制过去,别浪费之前的下载加速。