Expo Go 提供固定的一组原生能力,适合快速开始;应用加入它不包含的原生库或自定义配置后,就需要自己的开发构建。expo-dev-client 帮助 Agent 选择并搭起这个运行包,让之后的 JavaScript 修改仍能快速迭代。
先把 Expo 知识接入 Agent
Codex 用户在终端运行下面的 Expo 官方插件命令,也可在 Codex 的 /plugins 中找到 Expo。Claude Code 用户改用 claude plugin install expo@claude-plugins-official。两种插件都会带入 Expo Skills 与 MCP 配置;其他支持 Agent Skills 的客户端可用 npx skills@latest add expo/skills --skill '*',按提示选择客户端并刷新会话。安装插件本身不会构建或发布应用。
codex plugin add expo@openai-curated
打开已有 Expo 项目,直接说“使用 expo-dev-client”,并给出当前 SDK、目标平台及相关文件。
先选本地还是云端构建
以下是可按项目调整的首次输入:
使用 expo-dev-client,为当前 Expo 应用建立 Android 本地开发构建。先检查原生依赖、Android 工具链与现有原生目录,说明 Expo Go 为什么不够;使用现有包管理器安装所需依赖并给出构建步骤。保留手改原生文件,不发布商店、不提交云端构建。
本地 Android 构建需要配置 Android 原生工具链,iOS 本地编译需要 macOS 与 Xcode。EAS 可以在云端编译,但需要账号、相应配置与可用额度;选择云端并不是安装这个 Skill 的必然后果。先把目标设备和构建位置说清楚,能避免生成不适用的产物。
最小本地流程
官方文档的本地入口是在项目中运行 npx expo install expo-dev-client,再选择 npx expo run:android 或 npx expo run:ios。连接真机时可按平台配置并加 --device。命令会处理编译、安装和启动开发服务;已有原生目录时,应先弄清它们是生成产物还是包含手动维护的代码。
构建成功后,日常修改 JavaScript 或 TypeScript 通常只需 npx expo start。需要明确指定运行目标时,可以使用 npx expo start --dev-client。安装 Skill、安装应用依赖、编译原生包是三个不同步骤,不要把第一步完成当作设备上已经可以运行。
什么变化需要重新编译
增加或升级原生库、修改相关应用配置、升级 Expo SDK,都可能改变原生运行包。单纯刷新 JavaScript 不能把新原生 API 加进旧包。官方生成式流程可能需要重新生成原生目录再构建;prebuild --clean 会重建目录,手动维护原生代码的项目不能不加判断地照搬。
若选择 EAS,先确认 development profile、目标平台与模拟器或设备类型,再提交构建。开发构建不是商店发布包,分发和签名也需要按目标设备处理;TestFlight 不应成为每次本地调试的默认步骤。
以设备能连接项目为结束点
合适的产物是一份匹配项目的构建配置、已说明的命令和连接开发服务的方法。检查设备是否安装了新包、是否连接正确服务,以及所需原生能力是否存在。没有实际完成构建时,清楚保留剩余步骤;本地 JavaScript 能启动,并不代表原生编译和设备安装都已经成功。
从构建结果追到设备里的应用
如果选本地构建,让 Agent 记录目标平台、使用的命令、产物路径和实际安装设备。若选 EAS 构建,则保留 development profile、构建链接和目标设备类型,确认拿到的是开发客户端而非商店发布包。只看到 Metro 打印二维码,还不能证明手机已经装上包含新原生模块的包。
常见卡点可按链路排查:原生编译失败看 Xcode 或 Gradle 日志;包能安装但缺 API,检查是否仍在打开旧开发包;包已启动但连不上服务,检查设备与电脑的网络和启动模式。修改原生依赖后重新构建,再用目标功能作烟测;仅改 JavaScript 时则先尝试刷新,避免每次都无谓重编译。
什么时候别急着重新生成原生目录
如果项目里已有 ios 或 android 目录,先查看是否有人手改权限、扩展、签名或第三方原生代码。生成式项目与手动维护项目的升级方式不同;对后者直接运行清理式 prebuild,可能把关键配置抹掉。让 Agent 先给差异清单和恢复方案,再进行会改写目录的操作。构建成功后也不要只打开首页,至少访问本次促使你创建开发包的原生功能,确认它确实在新包里。
二维码打开了正式版怎么办
生产版与开发包同机安装时,旧版 Expo SDK 的一位用户遇到 Android 扫描开发二维码却进入正式版,iOS 则正常。先核对两套构建的 scheme、包名与 dev launcher 配置,确认设备装的是本次构建;需要继续排查时,可在开发包的启动器里手动输入 Metro 地址。这个问题与具体版本、系统链接分发有关,不能只靠重新启动 Metro 解决。