跳至主要內容

从 React Native 到 Expo:快速实现跨平台开发

njrexpoexpofull stackreact nativemobile大约 4 分钟约 1312 字

随着移动开发的需求日益增长,跨平台开发框架成为开发者的首选。其中,React Nativeopen in new windowExpoopen in new window 是两种备受关注的技术路线。这篇文章将从 React Native 的基础出发,探讨 Expo 的优势,并介绍如何搭建 Expo 项目、CI/CD 流程及开发体验。


为什么选择 Expo 而不是纯 React Native?

React Native 是一个基于 JavaScript 的开源框架,支持使用一套代码构建 iOS 和 Android 应用。Expo 则是围绕 React Native 构建的一套工具和服务,提供了一种更简便的开发体验。

核心对比

特性React Native CLIExpo
学习曲线较陡,需要配置 Xcode 或 Android Studio平缓,使用 Expo Go 即可快速启动
项目启动速度慢,需要较多依赖安装快,仅需 Node.js 和手机或模拟器
社区支持和扩展性强,自由配置强,但受限于 Expo 生态
构建和打包手动配置提供托管的打包服务
原生模块支持灵活,但需要手动集成有限,但支持 EAS (Expo Application Services) 解决方案

适用场景

  • React Native CLI:适合有移动开发经验或对原生模块有较高定制化需求的开发者。
  • Expo:更适合快速构建 MVP(Minimum Viable Product)或移动开发新手。

如何搭建一个 Expo 项目

Expo 的上手非常简单,只需几步即可构建一个跨平台应用。

环境准备

  1. 安装最新版本的 Node.js。
  2. 安装 Expo CLI:
    npm install -g expo-cli
    
  3. 确保设备上安装了 Expo Goopen in new window

创建项目

使用以下命令快速创建一个 Expo 项目:

npx create-expo-app@latest

相关信息

可以使用 --template 参数选择模板。

创建项目后,进入项目目录并启动开发服务器:

cd my-app
expo start

此时,你可以通过 Expo Go 扫描 QR 码或使用模拟器查看应用效果。

调试二维码
调试二维码

CI/CD 流程

Expo 提供了托管服务 EAS,用于自动化构建、部署和发布。

配置 EAS CLI

  1. 安装 EAS CLI:
    npm install -g eas-cli
    
  2. 初始化 EAS:
    eas init
    
    这会生成一个 eas.json 文件,用于配置构建流程。

如果你是 monorepo 项目,需要在 expo 项目目录下使用 eas-cli 来初始化 EAS。

配置构建

eas.json 中添加构建配置,例如:

{
  "build": {
    "production": {
      "ios": {
        "distribution": "app-store"
      },
      "android": {
        "buildType": "apk"
      }
    }
  }
}

运行构建

构建 iOS 和 Android 应用:

eas build --platform all

完成后,你会收到构建链接,可以下载或分发应用。

可以在官网 dashboard 中查看构建进度。

构建进度
构建进度

配置 GitHub CI/CD

expo 提供了 expo-github-actionopen in new window 来配置 GitHub CI/CD。

提示

更多配置请参考 expo-github-actionopen in new window

需要在 expo.dev 中生成一个 token,并配置到 GitHub 仓库的 secrets 中。

expo token
expo token

下面是个人项目 imperial-kitchenopen in new window 中的部分配置,仅供参考。

name: PR Preview

on:
  pull_request:
    types: [opened, synchronize, reopened]

jobs:
  eas-preview:
    runs-on: ubuntu-latest

    permissions:
      pull-requests: write

    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-node@v4
        with:
          node-version: 20.10.0
          cache: yarn

      - name: Setup Expo and EAS
        uses: expo/expo-github-action@v8
        with:
          eas-version: latest
          token: ${{ secrets.EXPO_TOKEN }}

      - name: Install dependencies
        run: yarn install

      - name: Change env
        working-directory: ./apps/mobile
        run: |
          EXPO_PUBLIC_BASE_URL=http://${{ secrets.TEST_DEPLOY_HOST }}:${{ secrets.TEST_DEPLOY_PORT }}
          echo $EXPO_PUBLIC_BASE_URL
          echo "EXPO_PUBLIC_BASE_URL=$EXPO_PUBLIC_BASE_URL" >> .env

      - name: Trigger EAS Preview
        uses: expo/expo-github-action/preview@v8
        id: preview
        with:
          working-directory: ./apps/mobile
          command: eas update --auto --branch ${{ github.event.pull_request.head.ref }}

当每次 PR 时,会自动触发构建,并生成预览链接,可以使用 Expo Go 扫描二维码查看。

expo-update
expo-update

也可在 Expo go 中登录账号,直接查看对应项目的所有更新。

expo go 查看更新
expo go 查看更新

开发体验

Expo 不仅降低了入门门槛,还提供了一些提升开发效率的工具:

  1. 实时刷新(Fast Refresh):代码修改后,应用会即时更新。
  2. 丰富的 API 支持:内置摄像头、位置、推送通知等常用功能。
  3. 跨平台统一性:一次编码,运行在 iOS 和 Android。
  4. 调试工具:支持使用 Chrome DevTools 或 VSCode 进行调试。
  5. EAS 构建:支持自动构建和发布,方便管理。

注意事项

  • 依赖管理:某些原生模块需要 eject(脱离)到裸工作流。
  • 性能优化:对于复杂 UI 和高性能需求,可能需要优化图像处理和动画。

推荐库

总结

Expo 通过降低技术门槛和提供完善的工具链,使跨平台开发变得更加轻松。对于需要快速实现 MVP 或缺乏移动开发经验的开发者,Expo 是一个理想选择。

如果你正计划开发一个跨平台应用,不妨试试 Expo,享受快速启动、强大功能和简化的开发体验!