Linux下sudo npm全局安装Yarn无报错失败 缺少get-uid-gid.js如何解决
故障根本原因
你遇到的安装失败核心是Ubuntu apt源内置的npm 6.14.4版本存在内置依赖文件损坏丢失:
- 报错日志里的
Cannot find module './get-uid-gid.js',是npm运行全局安装流程时,调用内置的权限计算模块触发的缺失错误 - Yarn 1.22.10的preinstall脚本默认把错误输出重定向到/dev/null,所以终端的verbose日志里不会直接弹出这个模块缺失提示,只会静默返回非0退出码
- 你之前在普通用户家目录找不到对应安装日志,是因为带sudo执行npm时,npm的日志输出会自动写入当前执行用户(root)的家目录路径,也就是
/root/.npm/_logs,和普通用户的日志目录相互独立。
可落地修复步骤
- 第一,先清理残留的损坏文件和缓存
先删除之前残留的损坏Yarn全局目录、强制清空npm缓存,避免旧文件干扰后续安装:sudo rm -rf /usr/local/lib/node_modules/yarn sudo npm cache clean --force - 第二,修复npm缺失的内置模块
因为当前npm是通过apt包管理器安装的,模块文件属于系统包的一部分,直接重装对应npm包即可补回缺失的文件:
安装完成后可以先校验模块是否恢复:执行sudo apt install --reinstall npmnode -e "require('/usr/lib/node_modules/npm/node_modules/get-uid-gid')",没有抛出模块缺失报错,就说明内置模块修复完成。 - 第三,重新执行Yarn全局安装
模块修复完成后,直接运行安装命令即可正常完成流程:sudo npm install --global yarn - 安装完成后执行
yarn --version,能正常输出版本号,就代表安装生效,可正常使用。
长期优化建议
Ubuntu 20.04 apt源默认带的Node.js 10.x、npm 6.x版本已经停止维护,后续全局安装各类包时还可能遇到同类内置模块路径不匹配、文件丢失的问题,后续可以将Node.js升级到仍在维护的长期支持版本,减少这类兼容性故障。
内容的提问来源于stack exchange,提问作者Ecko
相关产品推荐
相关产品推荐

