Expo 与 EAS Build 国内开发怎么配:依赖安装超时、Expo Go 连不上与云构建排队全解
Expo 让 React Native 开发省掉了大量原生配置:新建项目、在手机上用 Expo Go 扫码预览、用 EAS Build 在云端打出安卓和苹果安装包,再用 EAS Submit 提交到两大应用商店,整条链路不需要自己装 Xcode 或配置签名证书。国内开发者卡住的地方很集中:依赖安装停在某个包不动;Expo Go 扫码后提示无法连接到开发服务器;为了跨网络调试改用 tunnel 模式,结果隧道一直建立失败;执行 eas build 时上传项目压缩包失败,或者在免费队列里排了很久。
这几段其实走的是三条不同的网络:依赖安装访问 npm 仓库,开发服务器是你电脑与手机之间的局域网连接,云构建与提交则要和 Expo 的云服务、苹果与谷歌的开发者后台通信。局域网问题和境外访问毫无关系,境外服务问题靠线路解决,混在一起排查就会越改越乱。下面先讲各环节差异,再分步配置。Expo 的免费额度、付费方案与构建规则会调整,以官方最新条款为准。
Expo 开发链路各环节的网络差异
从表里能看出,只有局域网调试与境外访问无关,其余环节都要连境外服务。这也是很多人困惑的地方:开着线路时局域网调试反而失败,关掉线路后云构建又上传不了。解决办法是让局域网流量直连、境外服务走线路,下面的步骤会讲到。
| 环节 | 连接对象 | 依赖境外访问 | 常见失败 |
|---|---|---|---|
| 依赖安装 | npm 仓库 | 官方源需要,镜像不需要 | 安装停住、超时 |
| 局域网调试 | 电脑与手机 | 不需要 | 扫码后连不上 |
| 隧道调试 | 第三方隧道服务 | 需要 | 隧道建立失败 |
| 云端构建 | Expo 构建服务 | 需要 | 上传失败、排队久 |
| 热更新发布 | Expo 更新服务 | 需要 | 发布超时 |
| 商店提交 | 苹果与谷歌开发者后台 | 需要 | 认证或上传失败 |
从新建项目到提交商店:分步操作步骤
- 第一步:先把网络线路准备好。云构建、热更新和商店提交都要访问境外服务,先连上刺猬VPN,再打开终端执行命令;注册只需自定义用户名和密码,不需要邮箱和手机号,免费节点永久免费、不限流量,注册即用。客户端开启按域名或 IP 的智能分流,局域网地址保持直连;
- 第二步:安装依赖。新建项目后执行安装命令,停住不动时可以给 npm 配置国内镜像,或在终端里设置代理变量走官方源;锁文件里记录的仓库地址团队要统一,避免有人提交了镜像地址;
- 第三步:局域网调试。执行 npx expo start,电脑和手机连同一个无线网络,用 Expo Go 扫描终端里的二维码。连不上时先确认二维码里的地址是电脑的局域网地址,而不是虚拟网卡的地址;
- 第四步:必须跨网络调试时使用 tunnel 模式。执行时加上 --tunnel 参数,它依赖第三方隧道服务,建立失败多半是境外连接问题,确认终端已走线路后重试;
- 第五步:登录 Expo 账号。执行 eas login 输入账号密码,再执行 eas build:configure 生成 eas.json,里面按开发、预览、正式三种场景定义构建配置;
- 第六步:发起云构建。执行 eas build 并用 --platform 指定平台,命令会先把项目压缩上传,上传完成后构建在云端进行,终端可以关闭,进度和日志在 Expo 网站的项目页查看;
- 第七步:处理签名。苹果平台首次构建时,命令会要求登录苹果开发者账号并完成双重认证,让 EAS 代管证书与描述文件;安卓平台可以让 EAS 生成并托管签名密钥,也可以上传自己的密钥,密钥务必另行备份;
- 第八步:提交商店。执行 eas submit,苹果平台需要应用专用密码或开发者后台的接口密钥,安卓平台需要谷歌开发者后台的服务账号密钥,首次提交前要在后台手动创建好应用记录。
按现象排查:依赖、调试、构建与提交
先看失败发生在哪个命令、停在哪一行输出,再对照下面的现象处理。终端输出里的网址往往直接告诉你是哪一个服务没连上。加上详细日志参数重新执行一次,能看到更完整的请求过程,提问或搜索时也更容易找到对应的解决办法。
- 依赖安装报 ETIMEDOUT 或长时间无输出:访问 npm 官方源超时,配置镜像或设置代理变量;
- Expo Go 提示无法连接到开发服务器:手机与电脑不在同一网段,或电脑防火墙拦截了开发服务器端口,在系统防火墙里放行 Node 程序;
- 开着线路后局域网调试失败:线路接管了局域网流量,开启智能分流让局域网地址直连;
- tunnel 模式提示隧道建立失败:第三方隧道服务连接超时,确认终端走线路,或改回局域网模式;
- eas build 上传项目压缩包失败:项目体积过大或连接中断,在 .easignore 里排除无关文件,换稳定节点重试;
- 构建在云端失败:打开网站上的构建日志,按失败阶段处理,依赖安装阶段失败多半是锁文件与依赖版本不一致;
- eas submit 提示认证失败:苹果的应用专用密码过期或接口密钥权限不足,重新生成后再提交。
开发构建与 Expo Go 的选择
Expo Go 是一个预装了常用原生模块的通用客户端,扫码就能运行项目,适合起步阶段;但只要项目用到了 Expo Go 不包含的原生库,或者需要自定义应用图标、推送证书等原生配置,就要改用开发构建:用 eas build 打一个包含你项目原生代码的调试版安装包,装到手机上,再像 Expo Go 一样连接开发服务器。
开发构建只要在原生依赖变化时重新打包,日常改业务代码仍然是热重载,体验与 Expo Go 一致。对国内开发者来说,它还有一个好处:不依赖应用商店里的 Expo Go 版本与项目版本匹配,避免出现项目升级后 Expo Go 提示版本不兼容的问题。安卓手机可以直接安装构建好的安装包,苹果手机则需要先把设备注册到开发者账号。
团队协作与版本升级的注意事项
多人协作时,最常见的构建失败来自依赖版本不一致:有人用 npm、有人用 yarn,锁文件互相覆盖,本地能跑,云端构建却在依赖安装阶段报错。团队应约定一种包管理器并提交对应的锁文件,云端构建会按锁文件类型自动选择安装方式。环境变量与密钥不要写进代码仓库,放在 Expo 网站的项目密钥里,构建时自动注入。
Expo 大约每几个月发布一个大版本,每个大版本对应特定的原生框架版本。升级时不要手动逐个修改依赖版本号,用官方提供的升级命令统一处理,再执行依赖检查命令,它会列出与当前大版本不兼容的库。升级后先打一个开发构建在真机上跑一遍主要流程,确认没有问题再发正式构建。
热更新也要注意运行时版本:每次发布的更新只会推送给运行时版本相同的安装包,改了原生代码却忘记提升运行时版本,用户就会收到无法运行的更新而闪退。把运行时版本策略设置为跟随应用版本,是最不容易出错的做法。
线路方案对比
一个中等规模项目的压缩包可能有上百兆,频繁构建时上传稳定性最关键;热更新与商店提交的数据量较小,但对连接中断很敏感。偶尔构建用免费节点即可,每天发版的团队更适合时长套餐。实际可用性取决于当前网络环境。
| 对比项 | 免费节点 | 会员节点 | 只用国内镜像 |
|---|---|---|---|
| 依赖安装 | 官方源可用 | 官方源更稳定 | 镜像可用 |
| 云构建上传 | 多数情况可用 | 上传更稳定,适合大项目 | 不覆盖 |
| 商店提交 | 可用 | 可用 | 不覆盖 |
| 流量规则 | 永久免费、不限流量、不限速 | 时长套餐有效期内不限流量、不限速 | 不涉及 |
| 局域网调试 | 智能分流后直连 | 智能分流后直连 | 不涉及 |
| 适合场景 | 偶尔构建 | 每天构建与发布 | 只装依赖 |
和商店开发者后台的分工
EAS 只负责打包和代为上传,应用记录、内测分发与审核仍在两家商店的开发者后台完成。苹果开发者账号注册、证书与 TestFlight 内测的细节见 Apple 开发者账号与 TestFlight 指南;谷歌开发者账号注册、内部测试轨道与上架审核见 Google Play Console 开发者指南。
顺序上建议先在两个后台把账号和应用记录准备好,再配置 eas submit,否则提交时会因为找不到应用记录而失败。内测阶段用 TestFlight 与谷歌内部测试轨道分发,比直接发安装包更便于收集崩溃报告。
常见报错速查表
| 现象 | 原因 | 解决办法 |
|---|---|---|
| 依赖安装 ETIMEDOUT | npm 官方源超时 | 配镜像或设置代理变量 |
| Expo Go 连不上开发服务器 | 不同网段或防火墙拦截 | 同一网络并放行 Node 程序 |
| 开线路后局域网失败 | 局域网流量被接管 | 开启智能分流 |
| 隧道建立失败 | 第三方隧道超时 | 终端走线路或改局域网模式 |
| 构建上传失败 | 包体过大或连接中断 | 配置 .easignore,换稳定节点 |
| 提交认证失败 | 应用密码过期或权限不足 | 重新生成凭据 |
高频问答
- 问:EAS Build 免费能用吗?答:有免费额度,构建排队优先级较低,额度与价格以官方最新条款为准;
- 问:没有苹果电脑能打苹果安装包吗?答:可以,EAS 在云端构建,但上架仍需付费的苹果开发者账号;
- 问:为什么开着线路扫码反而连不上?答:局域网流量被线路接管,开启智能分流让局域网直连;
- 问:tunnel 模式一直失败怎么办?答:优先用局域网模式,必须跨网络时确认终端已走线路;
- 问:安卓签名密钥交给 EAS 托管安全吗?答:可以托管,但务必自己另外备份一份,丢失后无法更新应用;
- 问:热更新能替代重新提交审核吗?答:只能更新脚本与资源,改了原生代码仍需重新构建并提交。
让 Expo 开发链路顺畅起来
Expo 与 EAS Build 在国内开发的问题,按依赖、调试、构建、提交四段分别处理:依赖用镜像或代理,调试走局域网并开启智能分流,构建与提交走稳定的境外线路,签名密钥自己备份。四段理顺之后,从改代码到发到测试用户手里,可以压缩到一次构建的时间。
刺猬VPN 采用 HTTPS+AES 加密传输,自定义用户名和密码即可匿名注册;免费节点永久免费、不限流量、不限速,适合偶尔构建;时长套餐有效期内不限流量、不限速,适合每天构建与发布;客户端支持按域名或 IP 智能分流,局域网调试保持直连。Expo 的额度与价格以官方最新条款为准,实际可用性取决于当前网络环境。
换刺猬VPN告别连接烦恼:一键连接、连接稳定
刺猬VPN提供永久免费节点,不限流量;无需邮箱,自定义用户名即可匿名注册。一个账号支持多设备同时在线,实际可用性取决于当前网络环境。