跳至主内容

React Native 0.73 - 调试优化、稳定符号链接支持等新特性

· 1 分钟阅读
Marek Fořt
Marek Fořt
Software Engineer @ Shopify
Thibault Malbranche
Thibault Malbranche
Lead Mobile Engineer @ Brigad
Hur Ali
Hur Ali
Software Engineer @ Callstack
Luna Wei
Luna Wei
Software Engineer @ Meta
Alex Hunt
Alex Hunt
Software Engineer @ Meta
非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

今天我们正式发布 React Native 0.73!本次版本更新带来了 Hermes 调试优化、稳定的符号链接支持、Android 14 兼容性支持以及多项实验性功能。同时我们正式弃用旧版调试功能,并发布了新架构的核心支柱:无桥接模式(Bridgeless Mode)!

重点更新

重大变更

重点详解

调试功能优化

React Native 与 Hermes 团队始终致力于改进调试体验。在 0.73 版本中,我们很高兴与大家分享这项持续投入的首批成果。

Hermes 控制台日志历史记录

console.log() 是开发者快速调试 JavaScript 代码的常用手段。在先前版本中,React Native 应用的 console 日志需在调试器连接后才能记录,导致应用启动初期的关键日志难以捕捉。

React Native 0.73 已彻底解决此问题。Hermes 现能在后台捕获所有 console.log() 调用,并在首次连接调试器时自动发送至控制台面板——这与浏览器调试体验完全一致。此项优化同时适用于 Flipper、连接 Hermes 的 Chrome DevTools 以及实验性新版调试器。

调试文档更新

我们全面重构了调试文档,其中包含最新调试器连接指南、React DevTools 使用详解以及视觉升级。

0.73 版调试文档概览

实验性新版调试器

React Native 团队正在开发全新的 JavaScript 调试器体验,计划取代 Flipper,其技术预览版已在 React Native 0.73 中发布。该调试器能即时启动,采用精简版 Chrome DevTools 界面,专为 Hermes 环境下的 React Native 调试优化设计。

备注

注意:新调试器目前处于实验阶段,存在已知问题,我们将在后续版本中积极修复。试用时请通过原讨论帖反馈问题。

打开"欢迎"面板的新调试器界面

详细了解如何启用此功能,请查阅文档

Metro 稳定符号链接支持

Metro 的符号链接解析功能现已默认启用。该功能使得 React Native 在配合 monorepo 架构时,可通过配置 watchFolders 实现目录联动。

符号链接深度集成于 Metro 内部机制,可与快速刷新等功能协同工作,且打包性能损耗极低。所有桌面平台均支持该功能(无论是否使用 Watchman)。

信息

Monorepo 临时解决方案

我们已知晓在 monorepo 布局中使用 React Native 仍存在边界情况。相关修复工作已规划但未纳入 0.73 版本,我们将尽快发布更新。

对于 React Native 模板项目 (npx react-native init),需在项目根目录外配置 watchFolders 才能被 Metro 识别(详见说明)。若 react-native 依赖安装在不同层级目录,还需更新文件路径。

对于 Expo 应用,Yarn (Classic) 工作区支持已默认配置。另请参阅 Expo 文档中的《Monorepo 协作指南》

Android Kotlin 模板

我们宣布:自 0.73 起,Kotlin 正式成为 React Native Android 应用的推荐开发语言。此举顺应 Android 生态多年发展趋势,助您使用现代语言构建应用。

Android 模板已从 Java 切换为 Kotlin。新版 MainActivity.ktMainApplication.kt 文件体积缩小 36%。

The Upgrade Helper has also been updated to make it easier to migrate your .java files to .kt files. If you've previously modified the Java files in your project and you need support migrating them to Kotlin, you can use the Code > Convert Java file to Kotlin File utility of Android Studio (also accessible with the shortcut Cmd ⌘ + Shift ⇧ + Option ⌥ + K).

Android 14 支持

React Native 现已全面支持 Android 14。自 0.73 起,开发者可面向最新 Android SDK 版本 API Level 34(代号 Upside Down Cake)进行开发。

Java 17 与 Android Gradle 插件升级

为支持 Android 14,Android 应用的构建工具 Android Gradle Plugin (AGP) 已从 7.4.x 升级至 8.1.x

此 AGP 主版本升级包含多项破坏性变更,详见 Google 发布说明(8.0.08.1.0)。

最重要的是,构建 Android 应用现需Java 17 环境。可通过以下命令更新 Java 版本:

brew install --cask zulu@17

并按照入门指南更新您的 JAVA_HOME 环境变量。

如果您是库开发者,您的库应该无需修改即可兼容 React Native 0.73。今年早些时候,我们发布了一份说明,详细解释了 AGP 版本升级对库作者的影响。

授予对照片和视频的部分访问权限

选择性照片访问功能让 Android 14 用户能够授权应用访问媒体库中的特定项目,而非全部媒体内容。在 0.73 版本中,React Native 应用通过 PermissionsAndroid API 的 READ_MEDIA_VISUAL_USER_SELECTED 权限现已支持此功能。

Android 14 中的部分照片访问权限

最低 SDK 版本变更

React Native 0.73 将是支持 Android 5.0(API 21)的最终版本。下一版 React Native 的最低 SDK 要求将提升至 23(Android 6.0)。您可在此查看有关最低 SDK 变更的更多详情。

新架构更新

我们持续推进 React Native 新架构的部署,力求让整个开源社区都能使用这一技术。

自 React Native 0.68 起,新渲染器(Fabric)和新原生模块系统(TurboModules)已开放给用户体验评估。我们要特别感谢社区至今提供的宝贵反馈。

今天我们发布新架构的另一关键组件:无桥接模式(Bridgeless Mode)。此前开启新架构时,桥接机制仍需保留以兼容旧版组件和模块。但我们的最终目标是彻底淘汰桥接。从 React Native 0.73 开始,您可启用无桥接模式,该模式将完全禁用桥接的创建。

伴随无桥接模式,我们推出了原生模块互操作层,让您能在该模式下复用旧模块。React Native 0.72 引入的渲染器互操作层也已适配无桥接模式。

与整个新架构相同,无桥接模式目前处于实验阶段。我们诚邀感兴趣的用户启用此功能,并在新架构工作组反馈遇到的问题和兼容性情况。

弃用的调试功能

Flipper ↔ React Native 集成

我们正逐步停止将 Flipper 作为 React Native 应用的默认调试工具。在 0.73 版本中,首先弃用 React Native 内置的原生 Flipper 集成(即连接 Flipper 核心插件的引导代码)。我们将在下个版本彻底移除该集成和依赖——这意味着 Flipper 的网络插件等功能将停止工作。

保持不变:Flipper 作为原生应用调试的独立产品将继续存在。即使未来从新 React Native 项目中移除,开发者仍可手动将 Flipper 添加到应用

关于弃用 Flipper 的详细原因,请参阅该 RFC

远程 JavaScript 调试

远程 JavaScript 调试是一种传统的调试模式,它通过外部浏览器(如 Chrome)连接到应用,并在网页中运行 JavaScript 代码(例如 http://localhost:8081/debugger-ui)。这种模式可能导致调试时应用行为不一致,且与采用新架构的原生模块不兼容。

在 0.73 版本中,远程 JavaScript 调试已被弃用,并已从开发者菜单中移除。如需启用远程调试器,现在必须通过 NativeDevSettings API 手动启用。具体操作请参阅其他调试方法文档

信息

远程 JavaScript 调试曾是使用 JavaScriptCore (JSC) 应用的默认调试方案。对于 iOS 应用,我们建议改用 Safari 开发者工具(直接 JSC 调试)

我们推荐使用 Hermes,在所有平台上获得一致的调试体验。

重大变更

Babel 包重命名

我们将两个与 Babel 相关的包从 Metro 迁移到 React Native 仓库并统一了版本管理,从而简化维护和升级流程。这些包的新版本支持 0.73 中的新架构特性,因此必须更新相关依赖项。

升级时请遵循 Upgrade Helper 指南,确保已更新这些依赖项。部分包已重命名:

Old Package NameNew Package Name
metro-react-native-babel-preset@react-native/babel-preset
metro-react-native-babel-transformer@react-native/metro-babel-transformer
信息

@react-native/babel-preset 现已包含 @react-native/babel-plugin-codegen,无需在 Babel 配置文件中单独声明该插件。

其他破坏性变更

以下是 0.73 中的部分关键变更,完整变更列表请查阅更新日志

  • 最低 Node.js 要求提升至 18.x (#37709)(另见 Node.js 16 EOL)。

  • 模板现在使用 TypeScript 5.0 (#36862)。

    • React Native 类型声明仍兼容 TypeScript 4.8。
  • Android:构建 Android 应用现在需要 Java 17(参见上文)。

  • Android:Fresco 主版本升级至 3.0 (#38275)。

  • iOS:最低 iOS 版本要求提升至 13.4 (#36795)。

  • iOS:通过 Xcode 运行构建时,Metro 不再自动启动 (#38242)。

对于库开发者:

  • Android:AGP 升级至 8.1.1 版本(讨论)。

React Native CLI 变更

重点重大变更

  • 更改 build-android 命令的默认任务前缀。从今往后,运行 build-android 时将执行 bundle 任务而非 assemble 任务 (#1913)。

  • 移除 Metro 配置默认值的回退流程 (#1972)

  • 移除 run-ios 命令的 --configuration 选项(已由 --mode 替代)(#2028)

  • 移除 build-android 命令的 --variant 选项(已由 --mode 替代)(#2026)

查看 v12.0.0 完整更新日志

弃用 @types/react-native

正如我们在对 TypeScript 的一流支持中所述,自 0.71 版本起我们已在 react-native 中内置 TypeScript 类型声明。现宣布在 0.73 版本正式弃用 @types/react-native

我们将不再为现有版本提供后续补丁。建议开发者迁移不再使用 @types/react-native。具体操作指南请参阅迁移说明

致谢

React Native 0.73 版本包含来自 68 位贡献者的 2259 次提交,衷心感谢各位的辛勤付出!

升级到 0.73

建议开发者使用 React Native Upgrade Helper 查看项目升级所需的代码变更,同时参考升级文档。您也可通过 npx react-native@latest init MyProject 创建新项目

Expo 用户请注意:React Native 0.73 将在 Expo SDK 50 版本中获得支持

信息

0.73 现已成为 React Native 的最新稳定版本,0.70.x 版本将停止维护。更多信息请参阅 React Native 支持策略