Android Userland Ubuntu安装angular-cli报npm rename错误
故障原因
这个报错是Android端UserLAnd运行Ubuntu环境的典型兼容问题,和Angular CLI、npm本身的代码缺陷无关,核心诱因有两点:
- UserLAnd使用的是Android FUSE模拟文件系统,这类文件系统不支持npm缓存逻辑依赖的跨目录原子rename操作:npm下载依赖包时会先将临时文件写入
_cacache/tmp目录,下载完成后通过rename系统调用将临时文件原子移动到正式缓存目录,FUSE文件系统执行该操作时会出现文件句柄释放异常,导致rename执行时源临时文件已经被回收,触发ENOENT找不到文件错误。 - 你使用
sudo执行安装命令时,npm缓存路径指向/root/.npm,UserLAnd环境下root用户的文件权限映射存在缺陷,该路径下的临时文件会被Android存储管控机制意外清理,进一步放大了rename操作的失败概率。
修复步骤
按顺序执行以下操作即可完成安装:
- 先清理已损坏的历史缓存,执行时不要加sudo:
npm cache clean --force - 重新配置npm的全局安装路径和缓存路径,全部放到当前普通用户的家目录下,避开/root路径的权限映射问题,依次执行以下命令:
mkdir -p ~/.npm-global ~/.npm-cache npm config set prefix ~/.npm-global npm config set cache ~/.npm-cache echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc source ~/.bashrc
- 执行安装命令,禁止加sudo,同时添加参数绕过缓存原子重命名逻辑:
npm install -g @angular/cli --no-package-lock
- 如果上述命令仍然报rename错误,追加
--no-cache参数完全禁用本地缓存即可:npm install -g @angular/cli --no-package-lock --no-cache
安装验证
安装完成后执行ng version,终端正常输出Angular CLI、Node.js等版本信息即代表安装成功。
注意:后续在UserLAnd环境下安装npm全局包时,都不要加sudo,避免触发路径权限映射问题。
内容的提问来源于stack exchange,提问作者Phoenix
相关产品推荐
相关产品推荐

