跳转至主要内容

关于新架构推广的更新

·7 分钟阅读
Nicola Corti
Nicola Corti
Meta 软件工程师

大家好,正如先前宣布的那样

2022 年将是新架构在开源领域普及的一年

如果您还没有时间研究新的 React Native 架构(Fabric 渲染器和 TurboModule 系统),那么现在就是最佳时机

我们想与社区分享一些我们准备的倡议和材料,以确保每个人都参与到这项工作中。

工作组

最近,我们在 GitHub 上启动了 React Native 新架构工作组,这是一个仅供讨论的仓库,旨在协调和支持新架构在整个生态系统中的推广。

我们将此工作组设想为一个社区可以会面、分享想法讨论在新架构采用过程中面临的挑战的空间。此外,我们将使用此工作组与更广泛的社区分享信息和更新,以提高透明度。

为了使讨论重点明确,我们决定将此工作组设置为公开阅读,并限制写入仅对批准的用户开放。

如果您希望加入对话,可以填写此表格申请或提名您认为会对讨论有价值的某人。

欢迎所有人申请加入对话。

与所有讨论论坛一样,我们想再次强调尊重他人意见和欢迎的重要性。如果您尚未阅读我们的行为准则,请借此机会阅读。

迁移指南

经过几轮审查和反馈,我们最终合并了迁移指南(原名Playbook)。您可以在新架构工作组中找到它。

本迁移指南将向您展示如何使用逐步方法创建自定义 Fabric 组件或 TurboModule。该指南还将向您展示如何调整您现有的应用或库以使用新架构。

此外,我们想提醒您我们网站上全新的架构部分。在那里您可以找到几篇深入的文章和 React Native 内部机制的解释。具体来说,Fabric 部分可以帮助您了解新架构世界中的渲染管道。

最后,请考虑在工作组中分享您对这份文档材料的反馈。我们一直在寻找开发人员的意见,并且我们希望确保我们提供您认为最有用的内容。

在接下来的几个月中,我们将研究改进和添加更多文档以进一步帮助您。

新架构模板

React Native 0.68.0 即将发布。此版本的 React Native 标志着新架构推广的关键里程碑,因为它是第一个在新应用模板中包含可选开关的版本。

这意味着您将能够通过更改模板中的一行代码来尝试新架构。我们还在模板中添加了大量的注释和文档,以确保您无需额外阅读即可直接使用它。我们希望这将通过减少您必须编写的代码量来帮助您采用新架构。

在接下来的版本中,我们将继续更新模板,使其更加精简和易于使用。

要在任一平台上启用新架构,您可以

  • 在 iOS 上,在 ios 文件夹内运行 RCT_NEW_ARCH_ENABLED=1 bundle exec pod install
  • 在 Android 上,将 newArchEnabled 属性设置为 true通过以下任一方式
    • 更改 android/gradle.properties 文件中的相应行。
    • 设置环境变量 ORG_GRADLE_PROJECT_newArchEnabled=true
    • 使用 -PnewArchEnabled=true 调用 Gradle

然后您可以使用 yarn react-native run-androidrun-ios 运行您的应用,您将使用启用了 Fabric 和 TurboModules 的版本运行。

请考虑尝试这个新模板,并报告您可能遇到的任何错误或意外行为。在过去的几个月中,我们努力修复了错误和构建失败,如果没有社区的不断反馈和测试,这些错误和构建失败将难以发现

第三方库生态系统

如果没有第三方库作者和维护者的全力支持,社区将无法迁移到新架构。

我们理解这可能是一个繁琐的过程,并且我们理解支持旧架构和新架构用户的重要性。在接下来的几个月中,我们将专注于支持我们的库开发人员,以帮助他们迁移。

如果您是库开发人员我们邀请您在新架构工作组中发布更新,其中包含您库的状态。这将帮助您吸引早期采用者,并帮助我们了解是否有任何库遇到阻碍。

如果您是库用户,您可以在此处发布消息,请求迁移库。如果我们发现某个库成为许多用户的阻碍,我们将尝试联系维护者并了解他们尚未迁移的原因。

最后,我们要向 Software Mansion 致敬,感谢他们发布了新版本的 react-native-screens,该版本同时支持两种架构。此外,他们发布了一篇博客文章 (Introducing Fabric to react-native-screens),其中他们讲述了他们的迁移故事。我们希望您会发现这个故事具有启发性,并且对您解决迁移问题有所帮助。

发布

0.68 预发布版本的工作实现了我们在上一季度定义的改进的发布流程的许多方面。

我们很高兴与大家分享,在 0.68 版本中,我们能够

  • 成功地将发布工作纳入内部轮换。这在很大程度上得益于改进的发布流程文档,这将降低发布流程的公交车系数。
  • 与合作伙伴启动了讨论,以支持副驾驶轮换。我们希望这项努力能够提高流程的透明度,并告知我们的合作伙伴在哪里投资以支持 React Native 发布和生态系统。
  • 从社区招募了几位发布支持者和测试人员。我们在上一季度呼吁帮助,很多人都挺身而出!来自我们的测试人员和支持者的反馈帮助我们修复了关键错误和回归,特别是围绕即将发布的版本的新架构。感谢所有注册并测试发布版本的人!

在 React Native 0.69 中,我们将继续完善此流程,理想情况下,让合作伙伴提供更早的发布信号并招募副驾驶。与往常一样,任何反馈都非常受欢迎。如果您想作为发布测试人员或支持者加入,请在此处注册

迈向 Hermes 作为默认引擎

新架构推广的关键点之一是采用新的 JavaScript 引擎:Hermes。

借助新的 React Native 架构,我们将将 Hermes 设置为默认引擎。这意味着所有新的文档和模板都将启用 Hermes。

请注意,我们将继续与社区合作,以确保其他引擎(例如 JSC (JavaScript Core))得到支持。您仍然可以使用您希望的引擎,但您必须显式禁用 Hermes

为了提高 Hermes 的稳定性,我们正在努力改变 Hermes 的分发模型。具体来说,我们设想 Hermes 发布流程更接近 React Native 发布流程。

这将使我们能够发布一个 React Native 版本,其中捆绑了一个完全兼容的 JS 引擎。您不必处理运行时崩溃和 Hermes 不兼容问题,这些问题真的很难调试和理解。

此外,这将缩短获取 Hermes 中改进和错误修复的周期,这将使我们能够对 React Native 用户的需求做出更快速的响应。

我们将在未来几个月内分享更多关于此事项的信息。同时,请随时加入工作组就此进行讨论。

如果您还没有尝试过 Hermes,现在是时候试一试了。并请务必标记您可能遇到的任何问题或阻碍。

就这样,总结一下。

我要感谢 Andrei、Aleksandar、Dmitry、Eli、Luna、Héctor 和 Neil 审阅这篇博文,并为这些努力做出了宝贵贡献。

并期待阅读您的迁移故事