最近本人在做基于expo开发的某个APP,由于某种原因,eas云构建连接不上(卡在连接谷歌那一步),于是想要利用官方提供的本地构建功能在本地构建一下,结果在wsl这里摔了个跟头))
eas要求必须要在macos or linux下构建,因此我决定使用wsl进行构建
结果各种构建失败,卡在gradle构建步骤,然后我想着 不会构建普通java项目也失败吧
果不其然,构建普通项目也失败,网上各种查也是奇奇怪怪的不痛不痒的东西,但都提到了一个东西:这玩意与网络有关,观察wsl的工作状态时,我发现状态为无法连接守护程序,但是守护程序fork成功了,可能与网络有关系,于是我开始不断调试,各种配置防火墙。在研究wsl的网络原理时我发现当使用了镜像模式时,wsl访问localhost可以访问到win本机的端口,于是我猜想不会这客户端访问到win端口了吧。于是我将wsl的网络模式改为了NAT(这样wsl访问win机需要使用特殊的ip),然后重新配置代理
代理配置如下:
export WIN_IP=`ip route show | grep -i default | awk '{ print $3}'`
export PROXY_PORT=7890
export GRADLE_OPTS=" -Djava.net.preferIPv4Stack=true -DsocksProxyHost=${WIN_IP} -DsocksProxyPort=${PROXY_PORT} -Xms2g -Xmx4g"
export _JAVA_OPTIONS=" -Djava.net.preferIPv4Stack=true -DsocksProxyHost=${WIN_IP} -DsocksProxyPort=${PROXY_PORT} -Xms2g -Xmx4g"
win的代理端记得配置一下防火墙,且允许局域网设备
wsl配置文件如下 %UserProfile%/.wslconfig
[experimental]
autoMemoryReclaim=gradual
autoProxy=false
[wsl2]
localhostForwarding=false
最终解决了这个问题