跳到主要內容

Codegen CLI

呼叫 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 不會在 build 目錄中尋找 CMakeLists 檔案,而是在您的 outputDir 中尋找。