技术 · 实用指南
npm 在 rename 时提示 ENOTEMPTY?删除前先审计 path 与 dest
保存完整报错、停止并发写入,区分本地与全局安装,并检查精确目标目录。只有证明它是残留 staging 目录后才窄范围移走,再重试一次并验证缓存。

npm rename 阶段的 ENOTEMPTY 指向报错里 path 与 dest 之间的一次移动失败,并不证明整个 cache、lockfile 或 node_modules 都坏了。
先保存完整证据、停止并发写入并判断安装范围。检查两条路径;只移走能够证明是残留的目标目录,然后仅重试一次并验证。
先保存精确 rename 证据
复制完整错误块,特别是 code、syscall、path、dest,并保存 Node/npm 版本、prefix、cwd 与 verbose log。
目标常是点号前缀包名,但仍可能是活动目录或特殊文件系统上的路径,不能据此直接删除。
停止并发写入并分类
关闭编辑器任务、dev server、watcher 与其他 npm/npx 终端,先检查仍在运行的进程。
确认命令属于本地、全局、npx、容器还是挂载目录,并记录实际用户与 prefix。
移除前检查两条路径
列出 path 和 dest 的所有者、时间与内容,确认没有进程占用;共享文件系统先在本地磁盘复现。
若 dest 明确是同次失败的残留且无独有内容,只移走这一目录,并保留到一次受控重试结束。
重试一次并验证缓存
使用相同 cwd、用户和 prefix 重试一次;成功后运行项目检查并核 lockfile 与安装树。
执行 npm cache verify。只有证据指向缓存损坏时才考虑全量清理。
对重复失败升级调查
新 dest 再失败时,查并发安装、杀毒/索引、bind mount、网络文件系统与所有权,并比较新日志。
不要先用 sudo、递归改所有权或强制重装;不清楚时在干净本地目录复现并提交完整证据。
