npm 缓存占满 C 盘?三步把它迁到 D 盘(附验证与避坑)
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重点是记得把旧缓存复制过去别浪费之前的下载加速。