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 中查找。