升级Yarn3.2.1后yarn install报socket超时60000ms如何排查解决
问题定位方法
- 执行带调试日志的安装命令定位失败请求:运行
yarn install --verbose,超时发生前日志会打印当前正在拉取的包请求地址,可直接匹配到对应包。如果日志刷新太快无法定位,执行yarn install --verbose 2>&1 | tee yarn-install.log将全量日志写入本地文件,搜索socket timeout关键字后向上翻3-5行,即可看到失败请求对应的包名、版本和源地址。 - 校验配置是否生效:运行
yarn config get httpTimeout、yarn config get networkConcurrency确认自定义配置已加载。多数人修改超时后仍触发60000ms默认超时,核心原因是Yarn 3.x(Berry版本)和1.x版本配置体系不兼容,写在旧版.yarnrc里的配置不会被读取,修改等于无效。 - 判断故障类型:如果每次超时都固定对应同一个包,属于单个包源不可达问题;如果超时随机出现在不同包的拉取环节,属于全局网络配置、连接池问题。
对应解决方法
- 修正Yarn 3.x配置格式:所有配置必须写入项目根目录的
.yarnrc.yml文件,旧版.yarnrc的配置不会生效。可参考以下基础配置规避socket超时:
# 拉长请求超时到5分钟,覆盖默认60s限制 httpTimeout: 300000 # 降低并发数,默认16的并发很容易打满本地/代理连接池触发socket挂起 networkConcurrency: 8 # 显式配置可用的registry源,Yarn3不会自动读取1.x版本的源配置,默认走官方源 npmRegistryServer: "你实际可用的npm镜像源地址" # 如果使用代理必须显式填写,Yarn3不会自动读取系统代理配置 httpProxy: "http://代理地址:代理端口" httpsProxy: "http://代理地址:代理端口"
配置修改完成后执行yarn config set enableNetworkSettingsCache false清除缓存的错误网络配置,再重新执行安装。
- 清理旧版本残留缓存:Yarn1升级到3.x时旧缓存、lockfile可能存在兼容问题,执行以下命令清理残留后重装:
# 删除旧安装产物和缓存 rm -rf .yarn/cache node_modules .pnp.* yarn.lock # 重新执行安装生成新的依赖树 yarn install
- 特殊包单独处理:如果定位到是Git协议依赖、带二进制下载脚本的大体积包(比如前端构建工具、浏览器内核依赖包)固定超时,可将Git协议依赖替换为HTTPS协议地址,对带postinstall下载的包单独配置对应二进制镜像地址即可。
- 偶发超时兜底:如果上述配置调整后仍有随机超时,可执行
yarn install --inline-builds串行执行依赖拉取和构建流程,虽然安装速度会下降,但可以避免并发连接池溢出导致的随机socket挂起问题。
内容的提问来源于stack exchange,提问作者Aaron Campbell
相关产品推荐
相关产品推荐

