Expo 应用服务(EAS) CLI 完全指南:从入门到精通

Expo 应用服务(EAS) CLI 完全指南:从入门到精通

前言

在 React Native 和 Expo 开发中,构建、发布和更新应用一直是开发者面临的挑战。随着 Expo Application Services (EAS) 的推出,这些流程变得更加简单和自动化。本文将为您提供 EAS CLI 的全面指南,帮助您高效管理 React Native 应用的整个生命周期。

目录

  1. EAS 简介
  2. 安装与设置
  3. EAS CLI 命令详解
  4. eas.json 配置文件全解析
  5. 最佳实践与常见场景
  6. 常见问题解答
  7. 总结与进阶资源

1. EAS 简介

EAS (Expo Application Services) 是 Expo 提供的一套云服务和工具,用于构建、提交和更新 React Native 应用。它解决了传统 React Native 开发中的许多痛点:

  • 云端构建:无需在本地配置复杂的构建环境
  • 自动化发布:简化应用商店提交流程
  • OTA 更新:实现应用内容的快速更新,无需重新提交商店审核
  • 证书管理:无需手动管理复杂的签名证书

作为 Expo 生态系统的一部分,EAS 与 Expo Go 和 Expo SDK 完美配合,但同时也支持任何 React Native 项目,包括"裸"React Native 应用。

2. 安装与设置

安装 EAS CLI

bash 复制代码
npm install -g eas-cli

登录账户

bash 复制代码
eas login

项目初始化

在现有的 Expo 或 React Native 项目中初始化 EAS:

bash 复制代码
eas init

这将创建初始的 eas.json 文件,该文件是 EAS 配置的核心。

3. EAS CLI 命令详解

账户管理命令

命令 描述
eas login 登录到 Expo 账户
eas whoami 显示当前登录的用户信息
eas logout 从 EAS CLI 注销

构建相关命令

命令 描述
eas build 构建应用程序
eas build -p android 构建 Android 应用
eas build -p ios 构建 iOS 应用
eas build -p all 同时构建 Android 和 iOS 应用
eas build --profile <profile-name> 使用特定配置文件构建应用
eas build:configure 配置项目以使用 EAS Build
eas build:list 列出您的构建记录
eas build:status 查看特定构建的状态
eas build:view 在浏览器中打开构建页面

开发客户端管理

命令 描述
eas device:create 注册设备用于内部分发
eas device:list 列出已注册的设备
eas build:resign 对现有的 iOS 应用二进制文件重新签名

应用商店提交命令

命令 描述
eas submit 提交应用到应用商店
eas submit -p android 提交到 Google Play
eas submit -p ios 提交到 App Store
eas submit --profile <profile-name> 使用特定配置文件提交应用

更新管理命令

命令 描述
eas update 创建和发布更新
eas update --branch <branch> 将更新发布到特定分支
eas update --message "更新说明" 为更新添加描述消息
eas update:list 列出您的更新
eas update:view 查看特定更新的详细信息
eas update:rollback 回滚到之前的更新版本

分支管理命令

命令 描述
eas branch:create 创建新的更新分支
eas branch:list 列出项目中的所有分支
eas branch:delete 删除一个分支

环境与配置管理

命令 描述
eas secret:create 创建新的环境密钥
eas secret:list 列出项目的所有密钥
eas secret:delete 删除一个密钥
eas diagnostics 运行诊断检查,验证项目设置

4. eas.json 配置文件全解析

eas.json 是 EAS 的核心配置文件,定义了应用构建、提交和更新的各种设置。以下是一个典型配置及解析:

json 复制代码
{
  "cli": {
    "version": ">= 15.0.15",
    "appVersionSource": "remote"
  },
  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal"
    },
    "preview": {
      "distribution": "internal"
    },
    "production": {
      "autoIncrement": true
    }
  },
  "submit": {
    "production": {}
  }
}

cli 部分

json 复制代码
"cli": {
  "version": ">= 15.0.15",
  "appVersionSource": "remote"
}
  • version: 指定项目需要的最小 EAS CLI 版本,确保团队成员使用兼容的工具版本
  • appVersionSource : 定义应用版本号的来源
    • remote: 使用 EAS 服务器上记录的最新版本
    • local: 使用 app.json/app.config.js 中定义的版本

build 部分

json 复制代码
"build": {
  "development": {
    "developmentClient": true,
    "distribution": "internal"
  },
  "preview": {
    "distribution": "internal"
  },
  "production": {
    "autoIncrement": true
  }
}

build 部分包含不同构建配置文件(profiles)的设置:

development 配置
  • developmentClient : true - 构建开发客户端版本,支持实机调试
  • distribution : internal - 内部分发,仅安装到注册设备上

这个配置适合开发阶段,允许团队成员在真实设备上进行开发和测试。

preview 配置
  • distribution : internal - 同样是内部分发
  • 不包含开发客户端功能,更接近最终产品

这个配置适合内部测试或演示,功能完整但不发布到商店。

production 配置
  • autoIncrement : true - 每次构建时自动增加版本号
  • 默认 distributionstore,适合提交到应用商店

submit 部分

json 复制代码
"submit": {
  "production": {}
}

这部分配置应用提交到应用商店的设置。当前是空对象,使用默认设置,但可以根据需要添加:

json 复制代码
"submit": {
  "production": {
    "ios": {
      "appleId": "[email protected]",
      "ascAppId": "1234567890",
      "appleTeamId": "AB123456"
    },
    "android": {
      "track": "internal",
      "serviceAccountKeyPath": "./path-to-key.json"
    }
  }
}

5. 最佳实践与常见场景

场景一:开发流程

  1. 创建开发构建:

    bash 复制代码
    eas build --profile development --platform android
  2. 在真实设备上测试: 使用开发客户端,连接到本地开发服务器

  3. 发布预览版本:

    bash 复制代码
    eas build --profile preview --platform ios
  4. 生产发布:

    bash 复制代码
    eas build --profile production --platform all
    eas submit --platform all

场景二:快速迭代使用 EAS Update

  1. 发布 OTA 更新:

    bash 复制代码
    eas update --branch production --message "修复报表页面崩溃问题"
  2. 紧急回滚:

    bash 复制代码
    eas update:rollback --branch production

场景三:自定义构建配置

json 复制代码
"build": {
  "custom": {
    "android": {
      "buildType": "apk",
      "gradleCommand": ":app:assembleRelease"
    },
    "env": {
      "API_URL": "https://api.staging.myapp.com",
      "FEATURE_FLAGS": "beta,dark-mode"
    },
    "cache": {
      "key": "yarn-{{ hashFile('yarn.lock') }}"
    }
  }
}

使用自定义配置构建:

bash 复制代码
eas build --profile custom --platform android

6. 常见问题解答

Q: EAS Build 和传统的 React Native 构建方式有什么区别?

A: EAS Build 将构建过程转移到云端,无需在本地配置复杂的构建环境。它自动处理证书管理,支持多种分发方式,并与 Expo 更新系统无缝集成。

Q: 我的项目不是用 Expo 创建的,可以使用 EAS 吗?

A: 可以!EAS 支持任何 React Native 项目,包括"裸"React Native 应用。只需安装必要的 Expo 包并初始化配置即可。

Q: EAS 构建需要多长时间?

A: 构建时间取决于项目复杂度,通常在 5-15 分钟之间。首次构建会更长,因为需要设置初始缓存。

Q: 我可以在 EAS 中使用自定义原生代码吗?

A: 完全可以。EAS 支持完整的 React Native 功能集,包括原生模块和自定义代码。

7. 总结与进阶资源

EAS CLI 为 React Native 开发者提供了强大的工具链,简化了从开发到发布的整个流程。通过合理配置 eas.json,您可以创建符合各种需求的构建流程,实现应用的快速迭代。

进阶资源


如果你觉得这篇文章有帮助,欢迎点赞、收藏和分享!有任何问题也可以在评论区留言,我会尽快回复。

#React Native# #Expo# #移动开发# #前端#

相关推荐
敲代码的玉米C16 小时前
React Native中的iOS与Android平台差异详解
react native
爱学英语的程序员4 天前
zsh: command not found: adb 报错问题解决
react native·android-studio
Mr.NickJJ7 天前
React Native v0.78 更新
javascript·react native·react.js
还是一只小牛8 天前
RN页面首屏加载性能优化
android·前端·react native
蠟筆小新工程師9 天前
React Native 建構apps的好處在哪裡
javascript·react native·react.js
智绘前端9 天前
React Native国际化实践(react-i18next)
前端·javascript·react native·react.js·react
wayne2149 天前
React Native 0.78版本发布
react native
xiao芝麻12 天前
React Native 实现滑一点点内容区块指示器也滑一点点
javascript·react native·react.js
莫循瑾木12 天前
React Native国际化实践
react native·react.js