5月22日,Expo SDK 56正式发布。我周末刚把手上一个项目迁过去,体感很明显——有些优化甚至不用看更新日志就能察觉到。

先说重点:这次直接跳了两版React Native,从0.83跃升到0.85,同时搭载React 19.2。如果你是从SDK 55升级上来的,相当于一次跨过了0.84。

打开网易新闻 查看精彩图片

构建速度:什么都没做,但就是快了

iOS端的变化最直观。最重的Expo模块现在以预构建框架形式分发,本地和EAS构建都自动生效,无需任何配置。Expo测得的中位数干净构建时间缩短了约1分钟,降幅16%。EAS还额外预编译了Reanimated、Screens等常用社区库,又能再省1分钟左右。

Android的架构改动更大。新的Kotlin编译器插件取代了旧的反射式模块初始化,改为构建时生成元数据。官方数据:冷启动快40%,可交互时间提升至1.5倍,onCreate执行速度1.7倍。同样零配置,升级即生效。

还有一个实验性选项:Android codegen支持预编译头文件。官方基准测试中,某项CMake任务从17分钟降至6分钟。需在expo-build-properties中手动开启,构建图复杂的项目可以试试。

Hermes v1成为默认引擎

启动更快、内存更低、运行时性能更好。如果出问题,可以在expo-build-properties里切回旧版,但建议先开着观察。

升级前务必检查Node版本:v20.19.4以下已不再支持。先看CI镜像,否则会在安装环节卡二十分钟却找不到原因。

Expo UI终于稳定

经过三个SDK周期的迭代,SwiftUI和Jetpack Compose接口现已稳定,并进入默认模板。提供了一套跨平台组件(Host、Row、Column、Text、TextInput、Button、Switch、Slider等),无需再拆成.ios.tsx和.android.tsx。Web端仍是实验性质,生产环境慎用。

更实用的是社区库平替方案。改个import就能迁移:

// 之前
import DateTimePicker from '@react-native-community/datetimepicker';

// 之后
import DateTimePicker from '@expo/ui/community/datetime-picker';

同样的替换逻辑适用于bottom sheet、picker、segmented control、masked view、slider。注意部分props有差异,因为底层换成了SwiftUI和Compose而非UIKit,批量替换前先看文档。

会咬人的那个:expo-router与react-navigation脱钩

Expo Router曾经借用React Navigation的导航原语,现在正式fork独立。这是架构层面的根本变化,意味着之前隐式依赖的导航行为可能不再一致。迁移文档里专门列了一节讲这个,建议优先核对。