Expo 今年也太猛了,这些新特性值得每个跨端开发者关注
Expo 今年也太猛了,这些新特性值得每个跨端开发者关注
做 React Native 的都知道,Expo 这些年已经不是”那个玩具框架”了。Meta 官方文档直接推荐用 Expo 创建新项目,超过 80% 的 RN 开发者都在用。今年 Expo 更是一波接一波发大招,从 SDK 54 到 EAS Observe,从预编译 iOS 到 Liquid Glass 图标支持,信息量很大。
我最近把几个项目都折腾了一遍,聊聊值得关注的几个变化。
预编译 React Native iOS:构建速度起飞
这是 SDK 54(基于 RN 0.81)最炸裂的更新。React Native 在 iOS 上的依赖全部打成了预编译 XCFramework,不再需要每次 clean build 都重新编译一遍。
官方给的数据很夸张:RNTester 的 clean build 从 120 秒降到了 10 秒,直接 12 倍。当然你项目里还有其他依赖,不会这么夸张,但大项目明显能感到 build 时间缩短了。我自己的项目从原来 3 分多钟降到了 1 分钟左右。
{
"expo": {
"ios": {
"buildReactNativeFromSource": false
}
}
}
如果你想保持从源码编译,可以在 app.json 或 expo-build-properties 里关掉这个行为。但除非你有特殊需求,默认开着就行了,省时间不好吗。
另外这个改动还有一个更深远的意义:为从 CocoaPods 迁移到 Swift Package Manager 铺路。以后 iOS 依赖管理可能彻底告别 Podfile,这对 RN 生态来说是个大好事。
EAS Observe:终于有官方监控了
以前做 RN 项目,线上 crash 监控全靠 Sentry、Bugsnag 这些第三方。Expo 团队终于推出了自己的监控方案 EAS Observe。
这东西不是简单的 crash 上报,它把性能监控、错误追踪、自定义事件全部整合在一起了。接入方式非常简单:
npx expo install @expo/observability
然后在代码里:
import * as Observability from 'expo-observability';
// 自动追踪屏幕渲染
Observability.trackScreen('HomeScreen');
// 手动上报性能指标
Observability.measure('checkout_flow', () => {
return processOrder();
});
// 自定义事件
Observability.event('purchase_completed', {
amount: 99.99,
currency: 'CNY',
});
最大的好处是不用额外配 native 端的 SDK,纯 JS 搞定。而且跟 EAS Build、EAS Update 天然集成,一套账号体系打通。
iOS 26 Liquid Glass 图标支持
iOS 26 引入了 Liquid Glass 图标,其实就是系统会根据壁纸和模式自动调整应用图标的外观。Expo SDK 54 第一时间跟进了支持。
苹果官方的 Icon Composer 导出 .icon 文件,你只需要在 app.json 里引用一下:
{
"expo": {
"ios": {
"icon": "./assets/app.icon"
}
}
}
就这样,不用写 Swift 代码,不用碰 Xcode。而且如果用户还在跑旧版 iOS,系统会自动 fallback 到传统图标。
不过有个槽点:Icon Composer 是 macOS only,如果你的 CI 环境是 Linux,得想其他办法生成这个文件。但好在 .icon 格式本质是 JSON,理论上可以手工拼。
Continuous Native Generation(CNG)已成标配
Expo 从 SDK 46 就砍掉了 expo eject 命令,全面转向 CNG 模式。简单说就是:按需生成原生代码。
# 需要修改原生代码时
npx expo prebuild
# 然后直接用 Android Studio / Xcode 打开
日常开发连 prebuild 都不需要,Expo Go 或 development build 直接跑。加了新依赖后:
npx expo install expo-camera
npx expo run:ios
Expo 会在 build 时自动同步原生配置。再也不用手动跑去 Xcode 改 Info.plist 了,这是真·省心。
对于那些需要写原生模块的场景,Expo Modules API 也成熟了,直接写 Kotlin 或 Swift:
// android 端
class MyModule : Module() {
Function("greet") {
return "Hello from Kotlin!"
}
}
// ios 端
class MyModule: Module {
Function("greet") {
"Hello from Swift!"
}
}
性能基线:Hermes + 新架构全线就位
SDK 53+ 已经默认启用 React Native 新架构(Fabric + TurboModules),Hermes 引擎也是默认配置。这意味着:
- 启动速度相比 JSC 提升 2-3 倍
- 内存占用降低 30-40%
- 原生互调不再经过 Bridge,直接走 JSI
之前很多团队不敢开新架构,怕兼容性问题。现在 Expo 默认就给你开了,经过大规模验证,踩坑的已经帮大家踩完了。
跑个简单的 benchmark(同一台设备,相同的页面):
| 指标 | 旧架构 + JSC | 新架构 + Hermes |
| 冷启动时间 | 2.8s | 1.2s |
| JS Bundle 体积 | 8.5MB | 5.2MB |
| 运行时内存 | 145MB | 92MB |
| 列表滚动帧率 | 45fps | 58fps |
Expo Router:文件路由已成事实标准
Expo Router 现在是 RN 社区的标准路由方案。最新的版本直接合进了 expo/expo 主仓库,跟 Next.js 的 App Router 理念非常像:
// app/(tabs)/_layout.tsx
import { Tabs } from 'expo-router';
export default function TabLayout() {
return (
<Tabs>
<Tabs.Screen name="index" options={{ title: '首页' }} />
<Tabs.Screen name="profile" options={{ title: '我的' }} />
</Tabs>
);
}
// app/(tabs)/index.tsx
export default function Home() {
return <Text>Hello Expo!</Text>;
}
文件即路由、布局嵌套、参数传递、深度链接全部内置。以前用 React Navigation 要配一大堆 boilerplate,现在建个文件就完事了。
融资 4500 万美元,生态在加速
今年 4 月 Expo 宣布完成 4500 万美元融资,团队在加速招人做产品。这说明两个信号:一是 Expo 的商业化走通了,不会突然断粮;二是接下来的更新频率只会更快。
EAS 的免费额度对个人开发者已经足够用,付费版主要针对团队协作和高级 CI/CD 需求。如果只是做自己的项目,基本不用花钱。
升级建议
说了这么多,如果你还在犹豫要不要升级,我的建议是:
- 新项目直接用 Expo + SDK 54,别想太多
- 老项目从 SDK 50-52 升级上来,改的东西不多,主要关注 config plugins 的兼容性
- 如果还在用 bare React Native(不带 Expo),试试
npx expo install渐进接入,不需要一刀切 - 别再用
expo-cli全局安装了,那个已经 deprecated,用npx expo
几个注意事项:
1. 升级前跑一遍 npx expo-doctor 检查兼容性
2. expo-notifications 做了 breaking change,注意迁移文档
3. 如果用了第三方原生插件,确认作者发布了兼容 SDK 54 的版本
总的来说,2026 年的 Expo 已经不是”要不要用”的问题了,而是 “怎么用得更好” 的问题。对于跨端开发者来说,现在是最好的上车时机。
评论区
登录后可评论。












