新架构推广的更新
大家好,正如之前宣布的
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,它同时支持两种架构。此外,他们还发布了一篇博文(Introducing Fabric to react-native-screens),其中讲述了他们的迁移故事。我们希望这个故事能启发您并对您的迁移有所帮助。
发布
0.68 预发布版本的工作实现了我们在去年下半年定义的许多改进的发布流程。
我们很高兴地与您分享,通过 0.68 我们能够
- 成功将发布工作纳入内部轮岗。其中大部分得到了发布流程改进文档的支持,这将降低发布流程的“巴士因子”(Bus Factor,指关键人员的流失对项目的影响)。
- 与合作伙伴就支持Copilot 轮岗进行了讨论。我们希望这项工作能够提高流程的透明度,并告知我们的合作伙伴在何处投入资源来支持 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 审阅了这篇博文,并为这些工作做出了宝贵的贡献。
期待阅读您的迁移故事。
