跳到主要内容

Codegen 命令行界面

调用 Gradle 或手动调用脚本可能难以记忆,并且需要很多繁琐的步骤。

为了简化操作,我们创建了一个可以帮助你运行这些任务的 CLI 工具: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 版本(例如,运行在 React Native 0.75 上的应用程序)的应用程序不兼容。

启用 includesGeneratedCode

要启用此设置:

  • includesGeneratedCode 属性添加到你的库的 package.json 文件中的 codegenConfig 字段中。将其值设置为 true
  • 使用 codegen CLI 在本地运行 Codegen
  • 更新你的 package.json 以包含生成的代码。
  • 更新你的 podspec 以包含生成的代码。
  • 更新你的 build.Gradle 文件以包含生成的代码。
  • 更新 react-native.config.js 中的 cmakeListsPath,以便 Gradle 不会在构建目录中查找 CMakeLists 文件,而是在你的 outputDir 中查找。