宣布 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++ 代码,但你仍需要一个原生编译的入口。
从此,你可以用 CMakeLists.txt 文件替代项目中与 Android/原生相关的 Android.mk 文件。
此改动对新架构的应用和库用户均有益:
- 应用创建的 CMake 文件更简洁(3 行代码 对比 50 多行的 Android.mk 文件)。这为未来升级 React Native 版本提供了更轻松的体验,减少了你的维护负担。
- Codegen 现同时生成
Android.mk和CMakeLists.txt,因此使用我们为新架构库默认提供设置的库,无需担心额外操作。 - 上述自动链接将开箱即用支持 CMake 和 Android.mk 文件。
- 尽管应用开发者可自由选择
Android.mk或 CMake 文件,未来推荐方案是使用 CMake 文件(因其有更好的文档、工具链和生态支持)。
0.70 亮点
如上所述,本次发布的多个重要改进围绕新架构体验展开。此外,还有其他显著变化,包括:
- Catalyst 修复已上线,可在 Podfile 中将
mac_catalyst_enabled设置为true(详见升级助手差异)。 - Metro 升级至 0.72.0,将启用新版 React JSX 转换: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 插件升级至 7.2.1
- Gradle 升级至 7.5.1
- RCT-Folly 升级至 2021-07-22
- Metro 升级至 0.72
- SoLoader 升级至 0.10.4
你可以在更新日志查看完整变更列表。
致谢
共计 88 位贡献者提交了 493 次变更,助力本次发布——感谢大家!我们也感谢其他所有提供反馈的人,确保本版本尽可能稳定。



