跳至主内容

React Native 0.72 - 符号链接支持、更佳的错误处理等

· 1 分钟阅读
Lorenzo Sciandra
Lorenzo Sciandra
Senior Software Engineer @ Microsoft
Marek Fořt
Marek Fořt
Software Engineer @ Shopify
Riccardo Cipolleschi
Riccardo Cipolleschi
Software Engineer @ Meta
Luna Wei
Luna Wei
Software Engineer @ Meta
非官方测试版翻译

本页面由 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_enableSymlinksresolver.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,包含多项改进:减少冗余信息、优化措辞、精简冗长堆栈跟踪,并在以下命令中添加相关文档深度链接:initrun-androidrun-ios

您可以在 React Native CLI 更新日志 中查看其他改进内容。

Hermes 编译与 JSON 解析速度提升

Hermes 改进了大型对象字面量的编译速度。例如在 #852 反馈的问题中,用户将整个数据集写为大型对象字面量。通过优化 Hermes 使用的去重算法,编译速度提升了 97%(221c)。这些改进将惠及包含大量对象的应用构建过程。

JSON 解析也实现了多项优化(de9c6e2d),这将使依赖 JSON 操作的应用(如使用 redux-persist 的应用)从中受益。

Hermes 增强 ECMAScript 支持

React Native 0.72 中 Hermes 已支持以下规范:

使用 JSC 引擎的用户已默认支持上述特性

新架构更新迁移

新架构目前仍处于实验阶段。为了更精准地触达目标开发者群体,从 0.72 版本开始,我们将新架构的更新迁移至专属的工作组频道。这一调整也将允许我们更频繁地发布更新(例如每日构建中的进展)

您可在此处查阅 0.72 版本的新架构更新内容。请订阅 GitHub 工作组通知以获取新架构的最新进展

重大变更

弃用组件移除

以下包已在 React Native 0.72 中移除,请迁移至推荐的社区包:

包命名变更

所有从 react-native 核心仓库发布的包现已迁移至 react-native/packages 目录,并统一发布在 @react-native npm 作用域下以确保所有权清晰

react-native 主包不受此变更影响

Old Package NameNew 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 支持政策