React Native 0.70 版本发布
我们很高兴发布 React Native 的新版本 0.70.0。此版本带来了一些改进,例如 Codegen 的新统一配置、默认引擎 Hermes、对 Android 构建的完整 CMake 支持,以及对新架构文档的更新。请继续阅读以了解更多信息!
章节
新架构的新文档
在过去的几个月中,我们一直在努力为文档的新架构部分添加更多内容。在新部分中,您可以找到迁移指南、示例和教程,以帮助您快速上手。
同时,您可以找到深入探讨 为什么采用新架构 和 其各个组成部分 的新文档。我们希望这能帮助您更好地理解新 API 背后的原理。
欢迎提供任何反馈,请在 react-native-website 仓库中告知我们。
Hermes 作为默认引擎
React Native 0.70 是第一个默认启用 Hermes(我们内部的 JS 引擎)的版本。
这是 Hermes 团队和 React Native 团队共同努力的结果,以及社区的宝贵贡献。我们努力改进和微调 Hermes,使其性能更高,并交付社区高度要求的功能。
您可以在官方发布博文中阅读更多相关信息。
Codegen 的新统一配置
在 0.70 版本中,我们为 iOS 和 Android 引入了一种统一的方式来定义 Codegen 规范。以前,您必须将 Android 配置放在单独的 build.gradle
文件中。
现在,您可以直接在 package.json 中使用以下方式定义它
"codegenConfig": {
"name": "CustomAnimationView",
"type": "components",
"jsSrcsDir": "./src",
"android": {
"javaPackageName": "com.custom.animation"
}
}
此改进为库维护者在将其代码库迁移到新架构时提供了更一致的体验。
如果您是库维护者,请务必在 此讨论 中告知我们您的过程进展情况,该讨论位于 React Native 新架构工作组中。
新架构库的 Android 自动链接
在 0.70 版本中,新架构的用户能够自动链接库,而无需在其 Android.mk 或 CMake 文件上进行任何额外配置。
自动链接是 React Native 开发体验的关键部分。它允许您使用 yarn add
命令包含外部库,而无需处理 CocoaPods 或 Gradle 设置。
新架构要求我们调整自动链接功能,以支持使用 Codegen 并向应用开发者公开本机代码的库。
虽然自动链接在新架构库在 iOS 上运行良好,但对于 Android 来说并非如此。在 0.70 版本中,我们弥合了这一差距,您现在可以继续使用 yarn add
将库包含到您的项目中:它们将在任何架构上正确链接。
Android 构建的完整 CMake 支持
从 0.70 版本开始,用户现在可以使用 CMake 来配置其本机构建。虽然我们不期望应用用户直接编写 C++ 代码,但您仍然需要本机编译的入口点。
从现在开始,对于项目中任何与 Android/Native 相关的内容,您可以使用 CMakeLists.txt
文件而不是 Android.mk
文件。
此更改使新架构上的应用和库用户都受益,因为
- 在您的应用中创建的 CMake 文件要小得多(3 行代码,而 Android.mk 文件超过 50 行)。这使得未来 React Native 版本之间的更新体验更容易,并减少了您需要维护的代码。
- Codegen 现在同时生成
Android.mk
和CMakeLists.txt
,因此如果库使用我们为新架构库提供的默认设置,则无需担心执行任何操作。 - 上面提到的自动链接将开箱即用地与 CMake 和 Android.mk 文件一起使用。
- 尽管应用可以自由使用
Android.mk
或 CMake 文件,但未来的推荐解决方案将是 CMake 文件(因为围绕 CMake 有更好的文档、工具和生态系统)。
0.70 的亮点
如上所述,此版本中一些更重要的改进围绕新架构体验展开。但是,还有其他值得注意的更改,包括
- Catalyst 的修复已上线,在 Podfile 中将
mac_catalyst_enabled
设置为true
(有关详细信息,请参阅 upgrade-helper 差异)。 - 将 metro 升级到 0.72.0,这将启用新的 React JSX Transform:reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html。
- 删除
reactnativeutilsjni
,因为它与reactnativejni
从相同的源构建,这为每个 Android APK 构建节省了约 220 KB。(https://github.com/facebook/react-native/pull/34339)。
重大更改
还有一些重大更改
- 从 react-native 包中删除了 jest/preprocessor(0301cb285b,由 @motiz88 完成)
- 删除非标准的
Promise.prototype.done
(018d5cf985,由 @motiz88 完成)
另请注意,Metro 的版本已升级到 0.72,其中包含 5 项重大更改。
升级
我们还升级了一些依赖项
- 将 RN CLI 升级到 v9.0.0
- 将 Android Gradle Plugin 升级到 7.2.1
- 将 Gradle 升级到 7.5.1
- 将 RCT-Folly 升级到 2021-07-22
- 将 Metro 升级到 0.72
- 将 SoLoader 升级到 0.10.4
您可以在更新日志中查看完整的更改列表。
致谢
88 位贡献者通过他们的 493 次提交帮助实现了此版本的发布 - 感谢大家!我们还要感谢其他所有提供反馈以确保此版本尽可能稳定的人。