原文链接:React Native 0.84 - Hermes V1 by Default
作者: Alex Hunt Alan Lee Christian Falch Gabriel Donadel Dall'Agnol
今天,我们激动地宣布 React Native 0.84 正式发布!
本次版本将 Hermes V1 设为默认 JavaScript 引擎,为所有 React Native 应用带来显著的性能提升。我们还在持续移除 iOS 和 Android 平台上的旧架构相关代码,并默认提供 iOS 预编译二进制文件。
核心亮点
- 默认启用 Hermes V1 引擎
- iOS 平台默认提供预编译二进制文件
- 移除旧架构相关组件
- 最低要求 Node.js 22 版本
默认启用 Hermes V1 引擎
继 React Native 0.82 版本中首次推出实验性可选功能后,Hermes V1 现已成为 iOS 和 Android 平台上 React Native 的默认 JavaScript 引擎。
Hermes V1 代表了 Hermes 引擎的下一代演进,编译器和虚拟机均得到重大改进,JavaScript 性能实现可量化的提升。
对应用的影响
- 性能自动提升:所有应用默认使用 Hermes V1,执行速度更快,内存占用更低。
- 无需迁移操作:若你已在使用 Hermes(0.70 版本起默认启用),将自动升级至 Hermes V1,无需修改任何配置。
关闭Hermes V1
包管理器覆盖配置
在 package.json 中强制安装旧版 hermes-compiler 包:
- npm:在
package.json中添加"overrides": { "hermes-compiler": "0.15.0" } - yarn:在
package.json中添加"resolutions": { "hermes-compiler": "0.15.0" } - pnpm:在
package.json中添加"pnpm": { "overrides": { "hermes-compiler": "0.15.0" } }
iOS 平台
安装 CocoaPods 依赖时,传入环境变量 RCT_HERMES_V1_ENABLED=0 和 RCT_USE_PREBUILT_RNCORE=0。
Android 平台
在 android/gradle.properties 文件中添加 hermesV1Enabled=false,并配置应用从源码构建 React Native。
iOS 平台默认提供预编译二进制文件
React Native 0.84 现已在 iOS 平台默认提供预编译二进制文件。该功能此前为可选启用,如今默认开启,将大幅缩短 iOS 应用的构建时间。
这意味着你无需在每次执行清洁构建时都从源码编译 React Native 核心库。预编译的 .xcframework 二进制文件将在 pod install 过程中自动下载并使用。
提示:若你需要从源码构建 React Native(例如退出 Hermes V1 启用),可在安装 pods 时设置
RCT_USE_PREBUILT_RNCORE=0以禁用预编译二进制文件。
移除旧架构相关组件
继 0.82 版本(将新架构设为唯一运行时选项)之后,React Native 0.84 继续在 iOS 和 Android 平台移除旧架构代码。根据 RFC 文档规划,我们将在每个版本中逐步移除多个旧架构类。
iOS 平台
0.83 版本中,我们引入了实验性标志 RCT_REMOVE_LEGACY_ARCH 以编译移除旧架构代码。0.84 版本中,该行为成为默认配置 ——iOS 构建将不再包含旧架构代码,从而缩短构建时间并减小应用体积。
对于已迁移至新架构的应用,预计不会出现兼容性问题 —— 用于兼容的互操作层代码将保留。
重新启用 iOS 旧架构代码
若需在 iOS 构建中重新启用旧架构代码,需从源码构建。通过以下命令安装 CocoaPods 依赖:
RCT_USE_PREBUILT_RNCORE=0 RCT_REMOVE_LEGACY_ARCH=0 bundle exec pod install
Android 平台
已移除的旧架构类
本版本移除了以下旧架构相关类:
com.facebook.react.LazyReactPackage
com.facebook.react.bridge.CxxModuleWrapper
com.facebook.react.bridge.CxxModuleWrapperBase
com.facebook.react.bridge.CallbackImpl
com.facebook.react.bridge.NotThreadSafeBridgeIdleDebugListener
com.facebook.react.bridge.OnBatchCompleteListener
com.facebook.react.bridge.ReactCxxErrorHandler
com.facebook.react.bridge.ReactInstanceManagerInspectorTarget
com.facebook.react.modules.debug.DidJSUpdateUiDuringFrameDetector
com.facebook.react.devsupport.BridgeDevSupportManager
com.facebook.react.uimanager.NativeKind
com.facebook.react.uimanager.debug.NotThreadSafeViewHierarchyUpdateDebugListener
com.facebook.react.uimanager.layoutanimation.LayoutAnimationController
com.facebook.react.uimanager.layoutanimation.LayoutAnimationListener
最低要求 Node.js 22 版本
React Native 0.84 要求 Node.js v22.11 或更高版本。此次版本升级将提升 React Native 工具生态中现代 JavaScript 特性的可用性。
请在升级 React Native 前更新你的 Node.js 版本。建议使用 nvm 或 fnm 等 Node 版本管理器来管理多个 Node 版本。
其他变更
React 19.2.3 同步
本版本将 React 版本同步至 19.2.3,包含 React 团队最新的修复和改进。
支持 ESLint v9 扁平配置
React Native 的 ESLint 配置现已支持 ESLint v9 扁平配置(Flat Config),让你的项目更易适配最新的 ESLint 工具链。
平台支持增强
- 图片格式:React Native 0.84 新增对 HEIC 和 HEIF 图片格式的支持,更便于处理现代相机输出和图片库资源。
- PlatformColor:增强了
PlatformColor在动画插值和输出范围中的测试与支持。 - Android 键盘事件:新增 Android 平台的
onKeyDown/onKeyUp事件支持,实现对硬件键盘和电视遥控器的键盘事件处理。
可访问性优化
- 带有
onPress或onLongPress处理器的文本组件,将自动设置accessibilityRole="link",提升可访问性支持,确保屏幕阅读器能正确播报交互式文本元素。 - Android 平台:修复了循环利用视图(recycled views)的可访问性状态问题 —— 确保视图循环利用时,
isClickable和OnClickListener状态能正确重置,避免屏幕阅读器播报错误状态。
URL API 改进
- 为
URL对象补充了缺失的标准属性(hash、host、pathname等)。 - 为
URLSearchParams补充了标准方法(get、set、delete等),使 React Native 的 URL 实现更贴近 Web 标准。 - 修复了
URLSearchParams的重复条目问题。
其他重大变更
iOS 平台
通过将观察者封装在引用计数指针中,修复了 ImageResponseObserverCoordinator 中罕见的 EXC_BAD_ACCESS 崩溃问题。这一变更修改了 RCTImage 观察者 API 中的对象声明,可能会影响 react-native-svg 等依赖库。
Android 平台
移除了 BridgeDevSupportManager 类。
C++ 层面
JSBigString 现在直接实现 jsi::Buffer 接口,移除了 BigStringBuffer 中间层(目前处于废弃状态)。直接继承或依赖 BigStringBuffer 的代码可能需要进行更新。
JS 层面
应用内元素检查器(Element Inspector)中移除了旧版性能(Perf)和网络(Network)标签页,这些功能现已迁移至 React Native DevTools。
废弃功能
本版本宣布两项功能废弃:
- 网络相关:
XHRInterceptor和WebSocketInterceptorAPI 被废弃,开发工具应改用 Chrome 开发者工具协议(CDP)的Network域。 - TurboModules:
TurboModuleProviderFunctionType被废弃。
致谢
React Native 0.84 包含来自 95 位贡献者的超过 650 次提交。感谢所有开发者的辛勤付出!
特别感谢为本版本做出重大贡献的开发者:
- Riccardo Cipolleschi:实现 iOS 预编译二进制文件默认启用及 iOS 旧架构代码移除。
- Rob Hogan:升级最低 Node.js 版本至 22。
- Fabrizio Cucci:Android 平台可访问性优化。
- @pipopotamasu:支持 ESLint v9 扁平配置。
升级至 0.84 版本
提示:0.84 现已成为 React Native 的最新稳定版本,0.81.x 版本不再提供支持。更多详情请参阅 React Native 支持政策。
升级现有项目
除参考升级文档外,建议使用 React Native 升级助手(React Native Upgrade Helper)查看不同版本间的代码变更。
新功能:可尝试社区 CLI 项目的实验性
upgrade-react-nativeAI 工具。
创建新项目
npx @react-native-community/cli@latest init MyProject --version latest
Expo 项目
React Native 0.84 将随 expo@canary 版本提供。下一个 SDK(SDK 56)将搭载 React Native 的下一个稳定版本 0.85 发布。