返回项目目录
前端框架精选项目

Expo

基于 React Native 的通用应用框架与工具平台,覆盖 Android、iOS 和 Web。

主要语言TypeScript
开源许可MIT
项目类型前端框架
维护状态活跃维护
OVERVIEW

项目概述

Expo 为 React Native 提供路由、原生模块、开发构建、持续原生生成和应用发布工具,让团队用 TypeScript 构建并交付 Android、iOS 与 Web 应用。

Expo 是建立在 React Native 之上的开源应用框架和开发工具集合,目标是让一套 React/TypeScript 代码同时服务 Android、iOS 和 Web。Expo SDK 提供相机、通知、位置、安全存储、图片、音视频等经过版本协调的跨平台原生模块;Expo Router 使用 src/app 文件目录生成原生导航和 Web URL,并提供自动 Deep Link、类型化路由、延迟加载与静态 Web 渲染。开发初期可用 Expo Go 快速预览,但正式产品通常应创建包含自身原生依赖和配置的 Development Build。Continuous Native Generation 会根据 app config、依赖和 Config Plugin 按需生成 android/ios 工程,团队也可以选择保留并直接维护原生目录。EAS Build、Submit、Update、Workflows 和 Hosting 是与 Expo 深度集成的可选云服务,分别解决签名构建、商店提交、非原生内容更新、CI/CD 和 Web 托管;不使用 EAS 时仍可通过 Xcode、Android Studio 和 Expo CLI 在本地构建。

当前过渡版本Expo SDK 57
界面基础React Native
目标平台Android / iOS / Web
FEATURES

主要特点

Expo 把 React Native、通用路由、原生能力、开发构建和发布流程整合为一套可逐步深入原生层的应用平台。

01

通用 React Native 应用

使用 React、TypeScript 和 React Native 组件共享业务与界面逻辑,同时可通过平台文件和原生 API 定制 Android、iOS 与 Web。

02

Expo Router 文件路由

src/app 中的文件自动成为原生 Screen 和 Web URL,内置 Stack、Tabs、Deep Link、类型化路由和按路由延迟打包。

03

版本协调的 Expo SDK

提供相机、通知、位置、媒体、传感器和安全存储等模块,并通过 expo install 选择与当前 SDK 兼容的依赖版本。

04

Development Build

使用 expo-dev-client 创建团队自己的开发运行时,可包含任意兼容原生库、应用标识和 Config Plugin,不受 Expo Go 固定模块限制。

05

Continuous Native Generation

Prebuild 根据 app config、Expo SDK、Autolinking 和 Config Plugin 生成原生工程,让原生配置可以声明化并随时重新生成。

06

EAS Build 与 Submit

可在云端生成并签名 Android/iOS 二进制、共享内部构建,并将成功构建自动提交到 Google Play 或 App Store。

07

EAS Update

通过 expo-updates 向兼容 Runtime 推送 JavaScript、样式和资源更新,支持 Channel、分阶段发布、监控与回滚到先前更新。

08

本地与云端流程并存

既可以使用 Expo Go 和 EAS 快速开始,也能运行 expo run、EAS Local Build 或直接使用 Xcode 与 Android Studio 调试原生代码。

USE CASES

适用场景

适合希望共享大部分产品代码、快速覆盖 iOS 和 Android,并保留使用原生模块和平台定制能力的团队。

消费级移动应用

适合电商、内容、社区、生活服务和会员产品,在 iOS 与 Android 共享功能并保留原生导航体验。

跨平台 SaaS 客户端

团队可以复用认证、API、状态管理和设计系统,同时向移动端与 Web 提供一致的核心业务。

创业产品与 MVP

create-expo-app、Expo Router 和 EAS 能减少早期原生工程与签名配置成本,帮助小团队快速验证产品。

企业内部应用

内部 Distribution、Development Build 和 EAS Workflows 适合现场作业、销售、库存及员工工具的持续交付。

硬件与设备能力应用

Expo SDK 和第三方 React Native 库可访问相机、定位、通知、蓝牙与传感器,必要时还能编写 Expo Module。

通用内容与活动应用

Expo Router 的 Deep Link 和 Web 静态渲染适合同时提供可分享链接、移动 App 和浏览器入口的内容体验。

EVALUATION

优点与注意事项

技术选型不仅要看能力,也要理解它带来的团队成本。

主要优点

Expo 擅长的地方

  • React Native、路由、原生模块和发布工具由一套文档与版本体系协调
  • 大部分 TypeScript 业务代码可在 Android、iOS 和 Web 之间复用
  • Expo Router 默认解决文件导航、Deep Link、类型化路由和 Web URL
  • Development Build 支持任意兼容原生库,并不会把生产应用限制在 Expo Go 中
  • CNG 与 Config Plugin 可减少长期手工维护两套原生工程的负担
  • EAS 覆盖构建、签名、内部测试、商店提交、更新和工作流自动化
  • 团队可以随时使用本地原生工具或直接维护 android/ios 工程,不被云服务锁死

需要注意

采用前应考虑的问题

Expo Go 不是生产开发环境

它只包含固定原生模块和通用配置;需要自定义原生库、应用扩展或完整权限测试时必须使用 Development Build。

SDK 与 React Native 版本绑定

每个 Expo SDK 对应特定 React Native、React 和模块版本,升级前应检查 Breaking Changes、第三方库兼容性与原生构建。

SDK 57 正在过渡

当前 create-expo-app 默认行为在 SDK 54 与 57 模板间过渡,新项目应显式指定模板并确认 Expo Go 与目标设备支持情况。

仍需理解移动平台

权限、后台任务、推送、键盘、手势、生命周期、商店审核和设备差异不会因使用 Expo 而消失。

CNG 可能覆盖手工修改

执行 prebuild --clean 会重新生成原生目录;使用 CNG 时应把自定义原生变更写成 Config Plugin 或 Expo Module。

跨平台界面不会自动一致

触控、导航、字体、安全区域和系统控件在各平台行为不同,共享代码仍需针对真实 Android、iOS 与 Web 设备测试。

EAS 是可选托管服务

云构建和更新能简化交付,但配额、费用、凭据策略和合规要求需评估;敏感团队可本地构建或使用自己的 CI。

OTA 更新受到边界约束

EAS Update 只能更新 JavaScript 和资源,原生代码、权限、SDK 或依赖变化需要新二进制,并且必须遵守应用商店规则。

性能仍取决于应用架构

大型列表、图片、动画、启动流程和 Native Bridge 使用方式仍需分析优化,Expo 本身不能替代真机性能测试。

QUICK START

快速开始

使用 SDK 57 模板和 Expo Router 创建一个能在 Android、iOS 与 Web 运行的项目目录,并准备 Development Build 与商店构建。

1创建 Expo SDK 57 项目
bash
npx create-expo-app@latest expo-catalog --template default@sdk-57
cd expo-catalog
npx expo start
2定义根导航
tsx
import { Stack } from "expo-router";

export default function RootLayout() {
  return (
    <Stack>
      <Stack.Screen
        name="index"
        options={{ title: "开源项目" }}
      />
      <Stack.Screen
        name="projects/[slug]"
        options={{ title: "项目详情" }}
      />
    </Stack>
  );
}
3创建跨平台项目列表
tsx
import { Link } from "expo-router";
import {
  FlatList,
  StyleSheet,
  Text,
  View,
} from "react-native";

const projects = [
  { slug: "expo", name: "Expo" },
  { slug: "react", name: "React" },
];

export default function HomeScreen() {
  return (
    <View style={styles.container}>
      <Text style={styles.title}>开源项目</Text>
      <FlatList
        data={projects}
        keyExtractor={(item) => item.slug}
        renderItem={({ item }) => (
          <Link href={"/projects/" + item.slug}>
            {item.name}
          </Link>
        )}
      />
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    gap: 16,
    padding: 24,
  },
  title: {
    fontSize: 28,
    fontWeight: "700",
  },
});
4读取类型化路由参数
tsx
import { useLocalSearchParams } from "expo-router";
import { Text, View } from "react-native";

export default function ProjectScreen() {
  const { slug } = useLocalSearchParams<{
    slug: string;
  }>();

  return (
    <View>
      <Text>项目:{slug}</Text>
    </View>
  );
}
5创建生产级 Development Build
bash
npx expo install expo-dev-client

# 使用本机 Android Studio 或 Xcode 构建
npx expo run:android
npx expo run:ios

# 后续仅修改 TypeScript 时启动开发服务器
npx expo start --dev-client
6通过 EAS 构建应用商店二进制
bash
npm install --global eas-cli
eas login
eas build:configure
eas build --platform all

下一步:SDK 57 处于过渡期,创建项目时显式指定模板。Expo Go 适合学习和快速验证,正式应用应尽早使用 Development Build 测试真实原生依赖、权限、图标和启动配置。

ALTERNATIVES

类似项目

这些方案同样用于跨平台移动或通用应用,但在 UI 渲染、原生工程管理和云服务集成方面有所不同。

COMPARISON

Expo vs React Native CLI

Expo 与 React Native CLI 最终都构建真正的 React Native 应用,也都能使用原生代码。区别主要在于 Expo 提供统一 SDK、文件路由、CNG、Development Build 和 EAS 交付工具,而 React Native CLI 从显式维护 Android/iOS 工程开始。

比较维度ExpoReact Native CLI
项目起点create-expo-app 与协调好的 Expo SDKCommunity CLI 与标准 React Native 原生工程
原生目录可通过 CNG 按需生成,也可选择提交并手工维护android/ios 从创建项目起就是主要源码
导航新项目默认 Expo Router 文件路由自行选择和配置 React Navigation 等方案
原生模块Expo SDK、第三方库和自定义 Expo ModuleReact Native 社区库与直接编写原生模块
开发运行时Expo Go 快速预览,生产项目使用 Development Build从一开始编译项目自己的 Debug App
构建与签名可用 EAS 云服务,也可在 Xcode/Android Studio 本地完成通常直接使用本地原生工具或自建 CI
Web 支持Expo Router、React Native Web 与静态渲染集成需要自行增加 React Native Web 和 Web 工具链
更适合希望快速交付、共享平台代码并减少原生工程维护的团队从第一天就需要深度控制原生工程和定制构建系统的团队
如何选择

大多数新 React Native 应用可以优先从 Expo 和 Development Build 开始,因为它不会阻止使用自定义原生代码,同时能显著简化路由、依赖版本和发布流程;如果团队已有成熟原生基础设施,需要持续直接修改 Gradle、Xcode 工程或采用 Expo 工具尚未覆盖的架构,从 React Native CLI 起步可能更直接。无论选择哪种方式,都应以真机、商店签名和关键原生依赖进行早期验证。

VERIFICATION

资料核验

版本、维护信息与本页采用的官方资料来源。

最后核验2026 年 7 月 26 日
核验版本官方当前稳定版与文档主线
内容维护Docs100 编辑整理
项目维护状态活跃维护

本次核验覆盖 Expo 的核心定位、主要能力、官方入口与开源许可。项目版本持续更新,具体补丁版本、兼容性和迁移要求请在采用前继续核对官方发布记录。

维护状态核验2026 年 7 月 26 日 · 最近可见代码活动:2026 年 7 月 25 日

官方仓库未归档,核验时最近可见的代码活动日期为 2026 年 7 月 25 日。该状态表示项目近期仍有公开维护活动,不代表固定发布频率或长期支持承诺。

查看官方仓库