新架构推广的更新
大家好,正如之前宣布的
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-android` 或 `run-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 审阅这篇博客文章并为这些工作做出了宝贵贡献。
期待**阅读您的迁移故事**。