告别本地环境配置地狱,拥抱云端构建的丝滑体验 🚀
前言
还在为配置Xcode、Android Studio而头疼吗?还在为团队成员的"在我机器上能跑"而苦恼吗?EAS Development Build将彻底改变你的React Native开发体验,让你专注于业务逻辑,而不是环境配置。
目录
什么是开发构建?
开发构建 vs Expo Go 对比
特性 | 开发构建 | Expo Go |
---|---|---|
开发阶段 | 为移动应用开发提供类似 Web 的迭代速度 | 允许快速迭代和测试 Expo SDK 项目 |
第三方库支持 | 完全支持任何第三方库,包括需要自定义原生代码的 | 仅限于 Expo SDK 内的库 |
定制化 | 广泛的定制和直接访问原生代码 | 有限的定制,无需修改原生代码 |
适用场景 | 适合商店部署的成熟应用开发 | 适合学习、原型设计和实验 |
热更新 | ✅ 完全支持 | ✅ 完全支持 |
核心优势
- 🎯 专注业务逻辑:无需配置复杂的本地开发环境
- 🔥 保持热更新:开发体验与 Expo Go 一样丝滑
- 🛠 完整功能支持:任何第三方库、原生功能都能使用
- 👥 团队协作友好:统一的云端构建环境
- 💰 成本节约:不需要每人都买 Mac 和配置环境
为什么选择开发构建?
传统开发的痛点
bash
# 传统方式:添加一个相机库
npm install react-native-camera
cd ios && pod install # 可能失败,各种版本冲突
# 需要修改原生配置,调试环境问题
# 重新编译整个项目(20-30分钟)
# 团队成员同步代码后又要重新配置...
EAS 开发构建的优雅解决方案
bash
# EAS 方式:丝滑如丝
npm install react-native-camera
eas build --platform ios --profile development # 云端编译(10分钟)
# 下载安装,立即开始开发
# 团队成员直接使用编译好的构建,无需配置
实际场景对比
场景 1:新团队成员加入
传统方式:
- 配置 Xcode(几小时)
- 安装 Android Studio(几小时)
- 解决各种环境问题(一整天)
- "在我机器上能跑"问题频发
EAS 方式:
- 克隆代码仓库(2分钟)
- 下载开发构建(5分钟)
- 立即开始开发(0配置)
场景 2:跨平台开发
传统方式:
- 必须有 Mac 才能开发 iOS
- Windows 只能开发 Android
- 团队需要购买昂贵的硬件
EAS 方式:
- 任何平台都能开发 iOS + Android
- 云端统一构建环境
- 成本大幅降低
详细配置步骤
步骤 1:安装 expo-dev-client 库
bash
npx expo install expo-dev-client
详细解释:
什么是 expo-dev-client?
- 这是一个特殊的 React Native 库
- 它替代了 Expo Go 的功能
- 提供了开发时需要的调试工具和环境
安装过程中发生了什么?
-
包管理器操作:
bash# npx expo install 会自动选择正确的包管理器 # 相当于运行: npm install expo-dev-client # 或者 yarn add expo-dev-client # 或者 pnpm add expo-dev-client
-
依赖关系添加:
json// package.json 中会新增: { "dependencies": { "expo-dev-client": "~3.3.8" // 版本号会根据 Expo SDK 版本确定 } }
-
Metro 配置自动更新:
- 库会自动配置 Metro bundler
- 添加对开发构建的支持
- 启用原生模块的热重载
为什么使用 npx expo install
而不是 npm install
?
expo install
会确保版本兼容性- 自动选择与当前 Expo SDK 版本匹配的库版本
- 避免版本冲突问题
步骤 2:启动开发服务器验证
bash
npx expo start
关键变化分析:
安装前后的对比:
安装 expo-dev-client 之前:
bash
$ npx expo start
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ Metro waiting on exp://192.168.1.100:19000 ┃
┃ ┃
┃ Scan the QR code above with Expo Go (Android) or the Camera app (iOS) ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
› Press a │ open Android emulator
› Press i │ open iOS Simulator
› Press w │ open web
安装 expo-dev-client 之后:
bash
$ npx expo start
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ Metro waiting on exp://192.168.1.100:19000?expo-development-client ┃
┃ &scheme=novocare ┃
┃ ┃
┃ This QR code requires a development build. ┃
┃ Install a development build first, then scan this QR code. ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
› Press a │ open Android emulator (development build)
› Press i │ open iOS Simulator (development build)
⚠️ No development build installed
关键变化:
- URL 变化 :添加了
expo-development-client
参数 - 提示变化:明确指出需要开发构建
- 功能模式切换:从 Expo Go 模式切换到开发构建模式
步骤 3:安装 EAS CLI
bash
npm install -g eas-cli
详细解释:
什么是 EAS CLI?
- EAS = Expo Application Services(Expo 应用服务)
- CLI = Command Line Interface(命令行界面)
- 这是 Expo 官方提供的云端构建服务命令行工具
EAS CLI 提供的主要功能:
bash
# 查看所有可用命令
eas --help
# 主要命令分类:
eas login # 账户管理
eas init # 项目初始化
eas build # 云端构建
eas submit # 应用商店提交
eas update # OTA 更新
eas metadata # 应用元数据管理
验证安装:
bash
eas --version
# 输出类似:eas-cli/5.12.0 darwin-arm64 node-v18.17.0
步骤 4:登录 Expo 账户
bash
eas login
登录过程详解:
bash
$ eas login
? Email or username: your-email@example.com
? Password: [hidden]
✔ Logged in as your-username
登录验证:
bash
# 确认登录状态
eas whoami
# 输出:your-username
# 查看账户信息
eas account:view
步骤 5:初始化并链接项目到 EAS
bash
eas init
初始化过程的详细步骤:
bash
$ eas init
✔ Which account should own this project? › your-username
✔ Would you like to create a project for @your-username/novo-care-app? ... yes
✔ Created @your-username/novo-care-app
✔ Project successfully linked (ID: c3e1075b-6fe7-4686-aa49-35b46a229044) (modified app.json)
app.json 文件的变化:
修改前:
json
{
"expo": {
"name": "novo_care_app",
"slug": "novo-care-app",
"version": "1.0.0"
// ... 其他配置
}
}
修改后:
json
{
"expo": {
"name": "novo_care_app",
"slug": "novo-care-app",
"version": "1.0.0",
"extra": {
"eas": {
"projectId": "c3e1075b-6fe7-4686-aa49-35b46a229044"
}
}
// ... 其他配置
}
}
项目 ID 的重要性:
- 每个 EAS 项目都有唯一的 UUID
- 用于在 EAS 服务器上识别项目
- 团队协作时自动关联到同一个项目
步骤 6:配置项目用于 EAS Build
bash
eas build:configure
配置过程:
bash
$ eas build:configure
? Select platforms › - Space to select. Return to submit
❯ ◉ Android
◉ iOS
◯ All
✔ Generated eas.json
生成的 eas.json 文件:
json
{
"cli": {
"version": ">= 5.12.0"
},
"build": {
"development": {
"developmentClient": true,
"distribution": "internal"
},
"preview": {
"distribution": "internal"
},
"production": {}
},
"submit": {
"production": {}
},
"update": {
"production": {}
}
}
构建配置文件详解:
Development Profile(开发配置文件)
json
"development": {
"developmentClient": true, // 启用开发客户端模式
"distribution": "internal" // 内部分发模式
}
作用:
- 启用开发客户端模式
- 包含
expo-dev-client
库 - 支持热重载和调试工具
- 生成的应用可以连接到开发服务器
Preview Profile(预览配置文件)
json
"preview": {
"distribution": "internal"
}
用途:
- 接近生产环境的构建
- 用于最终测试和演示
- 不包含开发工具
Production Profile(生产配置文件)
json
"production": {}
用途:
- 用于应用商店发布
- 完全优化的构建
- 最小化包体积
配置完成验证
验证配置是否成功:
bash
# 1. 检查所有文件是否正确生成
ls -la
# 应该看到:eas.json
# 2. 验证配置文件语法
eas config
# 3. 查看项目状态
eas project:info
# 4. 测试开发服务器
npx expo start
# 应该显示开发构建模式
准备创建开发构建:
bash
# Android 开发构建
eas build --platform android --profile development
# iOS 模拟器开发构建
eas build --platform ios --profile development
# 或者同时构建两个平台
eas build --profile development
常见问题解答
Q: 使用开发构建后还能热更新吗?
A: 完全可以! 开发构建的热更新体验和 Expo Go 完全一样。
- ✅ 热更新体验完全一样
- ✅ 大部分开发时间都是热更新
- ✅ 只是最开始需要多一个打包步骤
Q: 什么时候需要重新打包?
99% 的开发时间不需要重新打包:
typescript
// 修改 JS/TS 代码 → 热更新 ✅
const [count, setCount] = useState(0);
// 修改样式 → 热更新 ✅
<View style={{ backgroundColor: 'red' }}>
// 添加新组件 → 热更新 ✅
function NewComponent() {
return <Text>New Feature</Text>;
}
只有这些情况需要重新打包:
bash
# 1. 添加新的原生依赖
npm install react-native-camera # 需要重新打包
# 2. 修改原生配置
# app.json 中的 plugins 配置变化 → 需要重新打包
# 3. 修改原生代码
# ios/ 或 android/ 文件夹中的代码 → 需要重新打包
Q: 开发构建和 Expo Go 如何选择?
推荐的学习路径:
markdown
1. 入门阶段:Expo Go
├─ 学习 React Native 基础
├─ 熟悉 Expo SDK
└─ 快速原型开发
2. 进阶阶段:开发构建
├─ 集成第三方库
├─ 自定义原生功能
└─ 商业应用开发
3. 高级阶段:纯 React Native
├─ 完全自定义原生代码
├─ 性能优化
└─ 复杂架构设计
Q: 团队如何协作?
传统方式的问题:
- 每个人需要配置本地环境
- "在我机器上能跑"问题频发
- 新人上手困难
EAS 开发构建的优势:
- 云端统一构建环境
- 新人可以直接下载构建开始开发
- 避免环境差异问题
最佳实践
1. 环境管理
根据你的 env.js
文件配置,已经有了很好的环境管理基础:
javascript
// env.js 中的配置
const APP_ENV = process.env.APP_ENV ?? 'development';
const BUNDLE_ID = 'com.novo_care_app';
const PACKAGE = 'com.novo_care_app';
可以为不同环境创建不同的构建配置:
json
// eas.json
{
"build": {
"development": {
"developmentClient": true,
"distribution": "internal",
"env": {
"APP_ENV": "development"
}
},
"staging": {
"extends": "development",
"env": {
"APP_ENV": "staging"
}
},
"production": {
"env": {
"APP_ENV": "production"
}
}
}
}
2. 构建优化
json
// eas.json 优化配置
{
"build": {
"development": {
"developmentClient": true,
"distribution": "internal",
"android": {
"buildType": "apk"
},
"ios": {
"simulator": true
}
}
}
}
3. 团队协作流程
bash
# 1. 开发者 A 添加新功能
npm install some-native-library
git commit -m "feat: add camera functionality"
# 2. 创建新的开发构建
eas build --profile development --message "Add camera support"
# 3. 分享构建给团队
# EAS 会提供下载链接,团队成员直接安装即可
# 4. 后续开发都是热更新
# 团队成员继续正常开发,享受热更新体验
4. 版本管理
json
// app.json
{
"expo": {
"version": "1.0.0",
"android": {
"versionCode": 1
},
"ios": {
"buildNumber": "1"
}
}
}
5. 自动化构建
可以配置 GitHub Actions 实现自动化构建:
yaml
# .github/workflows/eas-build.yml
name: EAS Build
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- run: npm install -g eas-cli
- run: eas build --platform all --non-interactive
总结
EAS 开发构建彻底改变了 React Native 的开发体验:
- 🎯 专注业务逻辑:告别环境配置地狱
- 🔥 保持开发效率:热更新体验不变
- 🛠 功能无限制:支持任何第三方库和原生功能
- 👥 团队协作友好:统一的云端构建环境
- 💰 成本大幅降低:无需昂贵的硬件投入
整个配置过程只需要 15 分钟,但带来的开发体验提升是巨大的。这就是为什么我们说"从未有过如此丝滑的React Native开发体验"!
立即开始你的 EAS 开发构建之旅吧! 🚀
参考链接: