跳到主要内容

新架构推广的更新

·阅读约8分钟
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 版本中,我们能够:

  • 成功将发布工作纳入内部轮换。这在很大程度上得益于发布流程的改进文档,这将降低发布流程中的“巴士因素”(bus factor,指关键人员离职对项目造成的影响)。
  • 启动与合作伙伴的讨论,以支持副驾驶轮换。我们希望这项工作能提高流程的透明度,并告知我们的合作伙伴应在何处投入以支持 React Native 发布和生态系统。
  • 吸纳了社区中的几位发布支持者和测试人员。上半年我们发出了求助呼吁,许多人挺身而出!我们的测试人员和支持者的反馈帮助我们修复了即将发布的版本中的关键错误和回归问题,特别是在新架构方面。感谢所有注册并测试发布的人!

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

将 Hermes 作为默认引擎

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

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

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

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

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

此外,这将缩短获取 Hermes 改进和错误修复的周期,这将使我们能够更及时地响应 React Native 用户的需求。

在接下来的几个月里,我们将分享更多关于此事宜的信息。同时,欢迎随时加入工作组的讨论

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

至此,汇报完毕。

我要感谢 Andrei、Aleksandar、Dmitry、Eli、Luna、Héctor 和 Neil 审阅此博文并为这些工作提供了宝贵的贡献。

并期待阅读您的迁移故事