配置代理后执行yarn set version berry报ETIMEDOUT错误
问题根因
执行yarn set version berry触发超时的核心原因是:该命令是Yarn 1(经典版)内置的版本切换逻辑,默认直连公网代码托管平台拉取Berry版本的发行包,不会读取你在.npmrc、.yarnrc中配置的包下载代理参数。
你之前配置的代理仅对常规的npm/yarn包安装逻辑生效,这也是为什么npm install -g yarn可以正常运行,但版本切换命令会直连公网443端口被企业代理拦截,最终抛出ETIMEDOUT连接超时错误。
解决方法
- 方案1:终端注入系统级代理环境变量后执行命令
版本拉取逻辑会读取进程级的代理环境变量,执行命令前先在当前终端注入代理参数即可:
Windows命令提示符(CMD)环境:
Windows PowerShell环境:set HTTP_PROXY=http://企业代理IP:代理端口 set HTTPS_PROXY=http://企业代理IP:代理端口 yarn set version berry
Mac/Linux终端环境:$env:HTTP_PROXY="http://企业代理IP:代理端口" $env:HTTPS_PROXY="http://企业代理IP:代理端口" yarn set version berryexport HTTP_PROXY=http://企业代理IP:代理端口 export HTTPS_PROXY=http://企业代理IP:代理端口 yarn set version berry - 方案2:配置Yarn版本拉取镜像源
不想每次执行命令前手动设置环境变量的话,可以直接修改Yarn版本拉取的默认地址为国内镜像,绕开对境外代码平台的直连:
配置完成后直接执行yarn config set yarnVersionDownloadBaseUrl https://registry.npmmirror.com/-/binary/yarn/yarn set version berry即可正常拉取。 - 方案3:本地导入版本包(网络管控极严场景适用)
如果企业网络完全限制公网访问,可以手动导入版本包:- 在可访问公网的设备上下载对应Berry版本的发行文件,放到项目根目录的
.yarn/releases/路径下 - 项目根目录执行
yarn set version from sources ./.yarn/releases/你下载的yarn-berry.cjs文件名,全程无外网请求即可完成版本切换。
- 在可访问公网的设备上下载对应Berry版本的发行文件,放到项目根目录的
校验方式:版本切换完成后执行
yarn -v,返回3.x或4.x开头的版本号即代表切换成功。
内容的提问来源于stack exchange,提问作者Harish Y
相关产品推荐
相关产品推荐

