执行npm install安装包时出现ENOENT重命名报错如何解决
报错原因
这个错误是npm本地缓存损坏导致的:之前运行npm安装时如果出现进程意外中断、多个npm进程同时读写缓存、缓存目录权限错乱,就会导致缓存临时目录里的文件丢失,后续npm拉取包要把临时缓存文件重命名到正式存储路径时找不到源文件,就会抛出这个ENOENT重命名错误。
解决方法
按以下顺序操作,每操作完一次就重新执行npm install验证是否恢复:
- 强制清理npm缓存
执行官方缓存清理命令,清除损坏的缓存索引和残留临时文件:
清理完成后可以执行npm cache clean --forcenpm cache verify做完整性校验,确认缓存状态正常。 - 手动删除损坏的缓存目录
如果强制清缓存没用,直接删掉报错里提到的cacache目录就行,npm下次运行会自动重建完整的缓存结构:
担心误删的话可以先把整个rm -rf /home/gustavo/.npm/_cacache/home/gustavo/.npm目录做个备份,正常删除缓存不会影响全局安装的包和项目配置。 - 修复缓存目录权限
如果删完缓存还是报错,基本是缓存目录权限不对——之前如果用sudo跑过npm install,会导致.npm目录下的文件所有者变成root,当前普通用户没有读写权限就会操作文件失败,执行以下命令把目录所有权改回当前用户:
后续尽量不要用sudo执行项目目录下的npm install命令,很容易反复搞乱权限触发同类问题。sudo chown -R gustavo:gustavo /home/gustavo/.npm - 排查冲突的安装进程
确认当前没有其他正在运行的npm、yarn、pnpm安装任务,多个包管理工具同时操作同一个缓存目录时会抢占文件锁,导致临时文件被提前清理,触发重命名失败,关掉所有并行的安装任务再重试即可。
补充:如果你是用nvm管理的Node.js版本,正常不会出现权限问题,要是反复出权限报错,可以检查下nvm的安装配置是否正确,不要混用系统全局安装的Node和nvm安装的Node。
内容的提问来源于stack exchange,提问作者Gustavo longen sadlovski
相关产品推荐
相关产品推荐

