Expo 开发环境:加速 React Native 迭代
Expo 开发环境:加速 React Native 迭代
Expo 是一套围绕 React Native 的开源工具和服务,它彻底简化了移动端开发的环境搭建与工程流程。本教程将带你从零开始搭建一个专业的 Expo 开发环境,并掌握提升迭代速度的核心技巧。
理解 Expo 的优势
在开始配置之前,我们先明确 Expo 能为你带来什么:
- 零原生依赖配置:无需安装 Xcode 或 Android Studio 即可开始开发,彻底告别环境冲突。
- 快速刷新:修改代码后,应用会在设备或模拟器上近乎实时地反应变更,无需手动重新编译。
- 跨设备实时预览:通过 QR 码同时在 iOS 和 Android 实体设备上预览应用。
- 统一的管理客户端(Expo Go):在开发阶段,可直接在手机上运行一个内置了大量原生 API 的容器应用,无需编译完整的原生二进制包。
- EAS(Expo Application Services):提供云端构建、提交和更新的完整 CI/CD 管道,让发布流程自动化。
第一步:安装基础工具
你需要电脑上已经存在 Node.js (推荐 LTS 版本) 和 Git。然后,全局安装 Expo 的命令行工具 eas-cli 以及创建项目的工具 create-expo-app,它体验更好且更稳定。
npm install -g create-expo-app eas-cli
你也可以使用 npx 直接运行,无需全局安装:
npx create-expo-app
如果你偏好 Yarn,create-expo-app 同样支持自动检测包管理器。
第二步:创建你的第一个 Expo 项目
使用交互式创建命令即可初始化一个带有 TypeScript 支持的新项目:
npx create-expo-app@latest MyFirstApp --template blank-typescript
该命令会在 MyFirstApp 文件夹下生成所有必要文件,并自动安装依赖。进入项目目录:
cd MyFirstApp
关键文件结构速览:
App.tsx:应用的根组件,你的开发起点。app.json或app.config.js:应用配置文件,定义名称、图标、权限、Scheme 等。tsconfig.json:TypeScript 配置。package.json:依赖和脚本。
第三步:在设备上启动开发服务器
确保你的手机和电脑处于同一 Wi‑Fi 网络(或通过 USB 连接)。启动服务器:
npx expo start
终端会显示一个 QR 码。在 iOS 上使用相机应用扫描,在 Android 上使用 Expo Go 应用中的“Scan QR code”功能。应用会立刻加载。
常见启动参数:
npx expo start --tunnel:当网络环境复杂(如公司防火墙)时,通过隧道建立公网连接。npx expo start --dev-client:当项目已集成了自定义原生代码(如使用了 expo-dev-client)时,必须使用开发客户端启动,而非 Expo Go。npx expo start --web:同步启动 Web 版本预览。
第四步:高效开发工作流
使用 Expo Go 快速迭代
Expo Go 是手机上的免费应用,内置了 Expo SDK 支持的所有 API。当你编写地图、相机、动画等代码时,直接刷新即可看到效果,无需任何原生构建。这是最快的学习和原型开发方式。
当需要原生代码时:迁移到开发客户端
如果你的项目需要 Expo SDK 未包含的原生模块,或你自行编写了原生代码(Java/Kotlin/Swift),就需要放弃 Expo Go,转而使用 expo-dev-client。它提供了可定制的开发版本客户端,且支持类似 Expo Go 的快速刷新。
创建开发客户端构建:
npx expo install expo-dev-client
随后运行 npx expo start --dev-client,并构建一个自定义客户端(见下文 EAS 构建)。开发客户端依然保留 QR 码连接方式,但你的应用会运行在包含了自定义原生代码的客户端中。
使用浏览器调试与现代检查工具
Expo 集成了 React Native 的开发者菜单(摇晃设备或按 Cmd + D / Ctrl + M)。推荐使用 React DevTools 和 Expo 内置的元素检查器。
- 在浏览器中直接打开 React DevTools:
然后在开发者菜单中选择“Connect to React DevTools”。npx react-devtools - 如需查看网络请求或使用 Reactotron 等第三方调试器,Expo 也完全兼容。
第五步:使用 EAS 进行云端构建
当需要生成可分发的应用包(如提交到应用商店的 IPA 或 AAB)或为开发客户端创建原生构建时,EAS Build 是官方推荐的服务。
登录并配置
eas login
然后为您的项目配置一次 EAS:
eas build:configure
它会创建一个 eas.json 文件,里面预置了 development(开发客户端)、preview (内部测试) 和 production (商店发布) 三种构建配置文件。
启动构建
构建一个开发客户端(以便在自定义原生环境继续开发):
eas build --profile development --platform ios
构建完成后,你的手机可以下载并安装这个自定义客户端,后续开发即可使用 npx expo start --dev-client 连接。
构建一个内部测试包:
eas build --profile preview --platform all
直接构建生产版本(用于商店提交):
eas build --profile production --platform all
所有构建过程都在 Expo 云端执行,支持高并发且无需本地配置复杂的原生编译环境。
第六步:增量更新与自动化
Expo 的一大杀手锏是 EAS Update,它允许你向已发布的应用程序推送 JavaScript 级别的更新,无需重新经过应用商店审核。
在项目代码中准备好更新后,执行:
eas update --branch main --message "修复了首页加载异常"
所有已安装应用的用户会在重启应用后自动获取最新更改。结合 GitHub Actions 或 EAS Workflows,可实现自动化的 CI/CD 管道。
第七步:环境变量管理
Expo 推荐使用 expo-constants 结合 .env 文件管理敏感信息。使用 expo install expo-constants 后,通过 expoConfig.extra 暴露变量。更现代的方式是使用 @expo/env 插件,它向上兼容且支持 .env.production 等多环境文件。
常见问题速查
- 电脑与手机无法连接:确认防火墙未拦截端口 19000 / 8081,尝试
--tunnel模式。 - Android 上“找不到 Expo Go”:确保已从官方渠道安装最新版 Expo Go,或使用 USB 连接后运行
adb reverse tcp:8081 tcp:8081再做npx expo start。 - 某些原生 API 不可用:检查 SDK 版本兼容性。如果所需模块不在 Expo Go 支持的列表中,则需要切换到开发客户端。
- 构建时间过长:首次构建会较慢,后续构建会利用缓存。可拆分 monorepo 或使用更精简的基础镜像。
- Metro Bundler 缓存问题:遇到奇怪的构建错误时,执行
npx expo start -c清除缓存后重启。
继续学习
你的 Expo 开发环境已经准备就绪。接下来你可以深入学习:
- 导航:集成 React Navigation (官方推荐)。
- 路由:了解新的文件路由系统(Expo Router),它基于文件系统自动生成深层链接。
- 性能优化:使用
expo-dev-client和 Flipper 分析性能。 - EAS Submit:直接从 CLI 将构建包提交到 App Store 和 Google Play。
借助这套环境,你将能够以 Web 开发的速度完成移动应用的迭代。现在,开始编写你的第一个功能吧。