本文档描述了 React Native 中用于从 JavaScript 规范自动生成必要的原生代码(C++、Java、Objective-C)的代码生成系统。代码生成是连接 JavaScript 和原生世界的关键基础设施组件,可减少创建原生模块绑定和 UI 组件时的手动工作和潜在错误。
有关使用此代码生成的特定 React Native 构建管道的信息,请参阅 构建管道。
React Native 中的代码生成系统可自动从 JavaScript 规范创建原生接口代码。它为以下内容生成样板代码:
这种自动化对于新架构(包括 TurboModules 和 Fabric)尤其重要,因为它依赖于 JavaScript 和原生代码之间的强类型接口。
来源
代码生成系统由几个关键组件组成,它们在构建过程中协同工作
来源
@react-native/codegen
@react-native/babel-plugin-codegen
构建系统集成
来源
React Native 包通过 package.json 中的 codegenConfig 字段定义了哪些模块和组件应该被代码生成器处理。
此配置告诉代码生成器:
来源
构建过程首先确保 CodeGen CLI 已构建
来源
处理 JavaScript 规范以提取模式
来源
然后使用模式生成特定于平台的代码
来源
对于原生模块,代码生成器创建:
生成的 JNI 头文件示例
来源
生成器还会创建相应的 CMakeLists.txt 文件,以将生成的代码包含在构建过程中
来源
对于 UI 组件(Fabric),代码生成器创建:
来源
在 Android 中,代码生成与 Gradle 构建系统和 CMake 集成
来源
在 iOS 中,代码生成与 CocoaPods 集成
来源
对于 React Native 应用,来自应用原生模块和组件的生成代码会被链接到应用的 createNative 模块
React Native Android 构建系统会设置必要的编译器标志以包含应用级的生成代码
来源
代码生成系统对于新架构(TurboModules、Fabric 和 Bridgeless 模式)尤其重要。DefaultTurboModuleManagerDelegate 和 DefaultComponentsRegistry 使用了生成代码
来源
生成的文件的存储位置如下
| 平台 | 生成文件位置 |
|---|---|
| Android | project/android/app/build/generated/source/codegen/ |
| iOS | project/ios/build/generated/ios/ |
如果代码生成失败,请检查以下内容:
codegenConfig 是否配置正确运行以下命令时,通常会清理生成的文件:
./gradlew clean (Android)pod install --clean (iOS)React Native 代码生成系统通过 JavaScript 规范自动生成原生代码,从而减少了手动工作,并确保了 JavaScript 和原生代码之间的类型安全。它是 React Native 构建系统的关键部分,特别是对于新架构,并且与 Android 和 iOS 的构建流程都进行了集成。
通过代码生成,开发人员可以专注于编写带有正确类型注解的 JavaScript 规范,系统将负责创建适当的原生接口和实现。