React Native 0.72 - 符号链接支持、更佳的错误处理等
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
今天我们正式发布 0.72 版本!
此版本新增了 Metro 中备受期待的功能、更佳的错误处理以及其他开发者体验改进。这些工作的优先级很大程度上来自您在 2022 年社区调查 中的反馈——感谢所有参与者的贡献!
重点更新
重大变更
重点详解
新 Metro 功能
符号链接支持(测试版)
符号链接支持一直是 Metro 中最受期待的功能之一。在 React Native 0.72 中,我们很高兴地宣布提供测试版支持。
符号链接支持使得 React Native 能够透明地与 monorepo 设置和 pnpm 协同工作,无需再使用变通方案。请参阅 启用测试版功能 以在您的应用中使用此功能。
目前该功能处于测试阶段,旨在收集不同工作流下的开发者体验反馈,更多详情请参阅此处。我们计划在 0.73 版本中默认启用符号链接。
Package Exports 支持(测试版)
Package Exports 是 package.json 中 "main" 字段的现代替代方案,它为 npm 包提供了定义其公共 API 并针对 React Native 的能力。
通过在 Metro 配置中启用 Package Exports 支持,您的应用将能够与更广泛的 JavaScript 生态系统兼容,包括通过新的 "react-native" 社区条件。请参阅 启用测试版功能 以在您的应用中使用此功能。
请参阅 React Native 中的 Package Exports 支持 了解此功能的详细信息及我们的稳定版发布计划。
启用测试版功能
要在您的项目中启用这些功能,请更新应用的 metro.config.js 文件,并设置 resolver.unstable_enableSymlinks 或 resolver.unstable_enablePackageExports 选项。
const config = {
// ...
resolver: {
unstable_enableSymlinks: true,
unstable_enablePackageExports: true,
},
};
新的 metro.config.js 设置
在 React Native 0.72 中,我们更改了 React Native CLI 中 Metro 的配置加载方式。请将项目的 metro.config.js 文件更新至模板版本。
请将配置文件更新为以下格式。您也可以参考 upgrade-helper。
这些 metro.config.js 格式变更将在 0.73 版本中成为强制要求。在 0.72 版本中,如果未更新配置,我们会发出警告提示。
此项变更将扩展基础 React Native Metro 配置的控制权移交给您的项目,同时我们清理了残留的默认配置。此外,这意味着独立的 Metro CLI 命令(如 metro get-dependencies)现在可以正常运行。
开发者体验改进
无效样式属性不再导致红屏错误
在此版本之前,在 StyleSheet 中提供无效样式属性会导致红屏错误。这种高干扰性的错误提示会中断开发者工作流,而实际风险相对较低。
在 0.72 版本中,我们放宽了该限制,改为静默处理(类似浏览器中无效 CSS 属性的行为),并更新了类型定义,使得部分错误可以在构建时而非运行时捕获。
Hermes 错误可读性提升
Hermes 新增了更清晰的错误提示,当调用未定义的可调用对象时会显示改进后的错误信息。
var x = undefined; x();
// Before: undefined is not a function
// After: x is not a function (it is undefined)
此外,LogBox 堆栈跟踪现在会过滤掉与应用程序用户无关的 Hermes 内部字节码帧。
React Native CLI 错误输出优化
0.72 版本搭载了 React Native CLI v11,包含多项改进:减少冗余信息、优化措辞、精简冗长堆栈跟踪,并在以下命令中添加相关文档深度链接:init、run-android 和 run-ios。
您可以在 React Native CLI 更新日志 中查看其他改进内容。
Hermes 编译与 JSON 解析速度提升
Hermes 改进了大型对象字面量的编译速度。例如在 #852 反馈的问题中,用户将整个数据集写为大型对象字面量。通过优化 Hermes 使用的去重算法,编译速度提升了 97%(221c)。这些改进将惠及包含大量对象的应用构建过程。
JSON 解析也实现了多项优化(de9c、6e2d),这将使依赖 JSON 操作的应用(如使用 redux-persist 的应用)从中受益。
Hermes 增强 ECMAScript 支持
React Native 0.72 中 Hermes 已支持以下规范:
-
支持 Array、TypedArray 和 String 的
prototype.at方法。详见 #823 (ebe2)。 -
实现 符合规范的 JSON.stringify (d41d),防止生成格式错误的 Unicode 字符串
-
实现 AggregateError (9b25),用于封装多个错误对象。特别适用于
Promise.any()等场景中处理全部 Promise 被拒绝的情况
使用 JSC 引擎的用户已默认支持上述特性
新架构更新迁移
新架构目前仍处于实验阶段。为了更精准地触达目标开发者群体,从 0.72 版本开始,我们将新架构的更新迁移至专属的工作组频道。这一调整也将允许我们更频繁地发布更新(例如每日构建中的进展)
您可在此处查阅 0.72 版本的新架构更新内容。请订阅 GitHub 工作组通知以获取新架构的最新进展
重大变更
弃用组件移除
以下包已在 React Native 0.72 中移除,请迁移至推荐的社区包:
包命名变更
所有从 react-native 核心仓库发布的包现已迁移至 react-native/packages 目录,并统一发布在 @react-native npm 作用域下以确保所有权清晰
react-native 主包不受此变更影响
| Old Package Name | New Package Name |
|---|---|
@react-native-community/eslint-config | @react-native/eslint-config |
@react-native-community/eslint-plugin | @react-native/eslint-plugin |
@react-native/polyfills | @react-native/js-polyfills |
@react-native/normalize-color | @react-native/normalize-colors |
@react-native/assets | @react-native/assets-registry |
react-native-codegen | @react-native/codegen |
react-native-gradle-plugin | @react-native/gradle-plugin |
若您未直接依赖任何重命名的包,则无需任何操作。升级至 React Native 0.72 后,请将所有重命名依赖更新至 ~0.72 版本
您可在专项 RFC 中查阅这些变更的决策背景
致谢
本次发布的许多功能都直接源于社区反馈。从嘈杂的红色错误弹窗的报告、Package Exports 的bug到新架构的基准测试——所有这些反馈对我们都弥足珍贵,感谢大家花费时间分享宝贵意见!
0.72 版本包含了来自 66 位贡献者的超过 1100 次提交。感谢各位的辛勤付出!
升级到 0.72
请在升级助手中查看需要做的更改列表,或查阅升级文档了解如何更新现有项目,也可使用 npx react-native@latest init MyProject 创建新项目。
如果您使用 Expo,React Native 0.72 将在 Expo SDK 49 中提供支持。
0.72 现已成为 React Native 的最新稳定版本,0.69.x 版本将不再获得支持。更多信息请参阅 React Native 支持政策。



