新架构推广的最新进展
大家好,正如之前宣布的
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-android
或 run-ios
运行您的应用,并且将启用 Fabric 和 TurboModules。
请考虑尝试这个新模板,并报告您可能遇到的任何错误或意外行为。在过去的几个月里,我们努力修复了如果没有持续的社区反馈和测试将**很难发现**的错误和构建失败。
第三方库生态系统
如果没有**第三方库作者和维护者**的全力支持,社区将无法迁移到新架构。
我们理解这可能是一个繁琐的过程,我们也理解支持旧架构和新架构上用户的重要性。在接下来的几个月里,我们将重点支持我们的库开发者,帮助他们完成迁移。
如果您是**库开发者**,我们邀请您在新架构工作组中**发布关于您的库状态的更新**。这将帮助您吸引早期采用者,并帮助我们了解是否有任何库面临障碍。
如果您是**库用户**,您可以在此处**发布消息**来请求库的迁移。如果我们发现某个库对许多用户构成了障碍,我们将尝试联系维护者,了解他们尚未迁移的原因。
最后,我们想特别感谢 Software Mansion 发布了支持两种架构的新版本 react-native-screens
。此外,他们还发表了一篇博客文章(将 Fabric 引入 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、D Dmitry、Eli、Luna、Héctor 和 Neil 审阅了这篇博客文章,并为这些努力提供了宝贵的贡献。
期待**阅读您的迁移故事**。