跳至主要内容

新架构推出更新

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

大家好,如之前宣布的那样

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

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

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

工作组

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

我们设想这个工作组将成为一个空间,社区可以在这里会面,分享想法,并在采用新架构的过程中讨论挑战。此外,我们将利用这个工作组为了透明起见,与更广泛的社区分享信息和更新。

为了使讨论集中,我们决定让此工作组公开阅读,并仅限经批准的用户写入

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

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

与每个讨论论坛一样,我们想再次强调尊重和欢迎他人意见的重要性。如果您还没有这样做,请利用机会阅读我们的行为准则

迁移指南

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

本迁移指南将向您展示如何创建自定义 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,它支持两种架构。此外,他们发布了一篇博文(将Fabric引入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 的发布流程。

这将使我们能够发布一个包含完全**兼容**的捆绑 JS 引擎的 React Native 版本。您无需处理运行时崩溃和 Hermes 不兼容性问题,这些问题非常难以调试和理解。

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

我们将在未来几个月分享更多关于此问题的信息。在此期间,欢迎您加入工作组的讨论

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

就这样了。

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

并期待着**阅读您的迁移故事**。