yarn install报Listing the refs failed、Exit code:128问题咨询
问题根因
你排查到的git://协议依赖引用是本次报错的直接诱因。
GitHub 早在2022年就全面下线了9418端口的未加密Git协议服务,所有指向git://github.com/的请求都会被服务端拦截,直接表现就是连接超时、git操作返回128错误码,和你使用的Yarn版本没有关系,只要依赖里硬编码了该协议地址,拉取必然失败。
修复方案
按操作成本从低到高排序,可按需选择:
全局快速修复(无需修改项目文件)
直接给本地Git配置全局协议替换规则,所有拉取GitHub仓库的Git请求会自动把git://协议转为可用的https://协议,执行命令:
git config --global url."https://github.com/".insteadOf git://github.com/
执行完成后直接重新运行yarn install即可,Yarn v1、v2底层调用Git拉取依赖时会自动应用该规则,不需要改动项目内的任何配置、锁文件,适合不想调整老旧项目原始文件的场景。
项目级永久修复(避免协作者复现问题)
如果需要从项目层面彻底解决问题,让所有拉取代码的人都不会踩坑,按以下步骤操作:
- 全局搜索项目内所有文件,定位所有硬编码
git://github.com/的位置,覆盖范围包括package.json的依赖字段、package-lock.json、yarn.lock、.yarnrc、.yarnrc.yml - 将所有匹配到的
git://github.com/xxx/xxx.git格式地址,统一替换为https://github.com/xxx/xxx.git - 删除本地已有的
node_modules目录,Yarn v1版本额外删除根目录yarn.lock,Yarn v2版本可清空.yarn/cache下的对应错误缓存 - 重新执行
yarn install,待依赖安装完成后,将变更后的配置文件、锁文件提交到Git仓库即可
Yarn v2(Berry)专项适配
如果使用Yarn v2开启了PnP或者零安装模式,除了上述Git协议配置外,可在项目根目录的.yarnrc.yml中追加如下配置,避免Berry的缓存机制导致替换规则不生效:
gitAlwaysFetch: true
注意:不建议替换为SSH协议地址,除非所有协作者都提前在本地配置了GitHub SSH密钥,否则未配置密钥的设备依然会出现拉取失败问题,HTTPS协议对公开仓库的兼容性最好,不需要额外鉴权即可正常拉取。
内容的提问来源于stack exchange,提问作者MyNameIsLinuxx
相关产品推荐
相关产品推荐

