跳至主内容

Codegen CLI 工具

非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

直接调用 Gradle 或手动执行脚本不仅难以记忆,而且操作流程繁琐复杂。

为简化这一过程,我们开发了 Codegen CLI 工具来协助执行这些任务。该命令会为您的项目运行 @react-native/codegen 包,支持以下功能选项:

sh
npx @react-native-community/cli codegen --help
Usage: rnc-cli codegen [options]

Options:
--verbose Increase logging verbosity
--path <path> Path to the React Native project root. (default: "/Users/MyUsername/projects/my-app")
--platform <string> Target platform. Supported values: "android", "ios", "all". (default: "all")
--outputPath <path> Path where generated artifacts will be output to.
-h, --help display help for command

使用示例

  • 读取当前工作目录下的 package.json,根据其中 codegenConfig 配置生成代码
shell
npx @react-native-community/cli codegen
  • 读取当前工作目录下的 package.json,在 codegenConfig 指定位置生成 iOS 平台代码
shell
npx @react-native-community/cli codegen --platform ios
  • 读取 third-party/some-library 路径下的 package.json,在 third-party/some-library/android/generated 生成 Android 平台代码
shell
npx @react-native-community/cli codegen \
--path third-party/some-library \
--platform android \
--outputPath third-party/some-library/android/generated

将生成的代码包含到库中

Codegen CLI 对库开发者而言非常实用,可用来预览生成代码以确定需要实现的接口。

通常生成代码不会包含在库中,而是由使用该库的应用在构建时运行 Codegen 生成。 这种模式适用于多数场景,但 Codegen 也支持通过 includesGeneratedCode 属性将生成代码直接集成到库内部。

理解启用 includesGeneratedCode = true 的影响至关重要,直接集成生成代码具有以下优势:

  • 无需依赖应用执行 Codegen,生成代码始终可用

  • 实现文件与生成接口始终保持一致(增强库代码对 Codegen API 变更的兼容性)

  • Android 平台无需维护两套文件支持不同架构,仅保留新架构文件即可确保向后兼容

  • 所有原生代码均已就绪,可将库的原生部分作为预构建包分发

但同时也需注意以下局限:

  • 生成代码基于库内指定的 React Native 版本(例如库使用 React Native 0.76 时,生成代码将适配该版本),可能导致与使用旧版 React Native 的应用(如运行 0.75 版)不兼容

启用 includesGeneratedCode

启用此模式的操作步骤:

  • 在库的 package.json 文件中,向 codegenConfig 字段添加值为 trueincludesGeneratedCode 属性

  • 使用 codegen CLI 在本地运行 Codegen

  • 更新 package.json 以包含生成代码

  • 更新 podspec 文件以包含生成代码

  • 更新 build.Gradle 文件以包含生成代码

  • react-native.config.js 中更新 cmakeListsPath,使 Gradle 从您的输出目录而非构建目录查找 CMakeLists 文件