Turborepo logo

產生程式碼

將您的 Monorepo 分割成多個套件是組織程式碼、加速任務並改善本機開發體驗的好方法。透過 Turborepo 的程式碼產生功能,可以輕鬆地以結構化的方式為套件、模組甚至個別 UI 元件產生新的原始碼,並與儲存庫的其餘部分整合。

新增空的套件

將新的空應用程式或套件新增至您的 Monorepo。

終端機
turbo gen workspace

檢視 gen workspace 的所有可用選項

複製現有套件

您可以使用現有的工作區作為新應用程式或套件的範本。這適用於現有 Monorepo 內的工作區,以及來自其他儲存庫的遠端工作區 (透過 GitHub URL 指定)。

範例

透過從儲存庫中的現有套件複製,在您的 Monorepo 中建立新的套件。

終端機
turbo gen workspace --copy

透過從遠端套件複製,在您的 Monorepo 中建立新的工作區。

終端機
turbo gen workspace --copy https://github.com/vercel/turborepo/tree/main/examples/with-tailwind/packages/tailwind-config

注意:從遠端來源新增時,Turborepo 無法驗證您的儲存庫是否具有所有必要的依賴項,以及是否正在使用正確的套件管理器。在這種情況下,可能需要進行一些手動修改,才能讓新的工作區在您的儲存庫中如預期般運作。

檢視 gen workspace --copy 的所有可用選項

自訂產生器

如果內建產生器不符合您的需求,您可以使用 Plop 設定建立自己的自訂產生器。Turborepo 將自動偵測儲存庫內的任何產生器設定,並使其可從命令列執行。

雖然 Turborepo 產生器是建立在 Plop 之上,但它們不需要在您的儲存庫中將 plop 安裝為依賴項。

雖然 Turborepo 了解所有 Plop 設定選項和功能,但它提供了一些額外功能,以改善在以 Turborepo 設定的儲存庫中撰寫產生器的體驗。

  1. 產生器會自動探索、載入和依工作區組織 (無需在單一設定檔中手動 load 它們)
  2. 產生器會自動從定義它們的工作區根目錄執行
  3. 產生器可以從儲存庫內的任何位置 (或透過 --root 旗標從外部) 叫用
  4. TypeScript 產生器支援零設定
  5. plop 不需要安裝為儲存庫的依賴項

已知問題

自訂產生器目前不支援 ESM 依賴項。

開始使用

若要建置和執行自訂產生器,請使用 Turborepo 從 Monorepo 內的任何位置執行下列命令。

終端機
turbo gen

系統會提示您選取現有的產生器,或者在您還沒有產生器時建立一個。您也可以在儲存庫根目錄或任何工作區內的 turbo/generators/config.ts (或 config.js) 手動建立您的設定。

如果您使用 TypeScript,您將需要安裝 @turbo/gen 套件 作為 devDependency,以存取必要的 TS 類型。

例如,以下說明具有三個產生器位置的 Monorepo

package.json
package.json
package.json
package-lock.json
turbo.json

在工作區內建立的產生器會自動從工作區根目錄執行,而非儲存庫根目錄或產生器設定的位置。

這使您的產生器更容易撰寫。在 [workspace-root] 建立檔案只需要指定為 <file>,而不是 ../../<file>

深入了解使用 Plop 建立自訂產生器

撰寫產生器

產生器設定檔是一個函式,會傳回 Plop 設定物件。設定物件用於定義產生器的提示和動作。

在其最簡單的形式中,產生器設定檔看起來像

turbo/generators/config.ts
import type { PlopTypes } from "@turbo/gen";
 
export default function generator(plop: PlopTypes.NodePlopAPI): void {
  // create a generator
  plop.setGenerator("Generator name", {
    description: "Generator description",
    // gather information from the user
    prompts: [
      ...
    ],
    // perform actions based on the prompts
    actions: [
      ...
    ],
  });
}

提示

提示是使用 Plop 提示撰寫的,用於從使用者收集資訊。

動作

動作可以使用內建 Plop 動作,或您自己定義的自訂動作函式

turbo/generators/config.ts
import type { PlopTypes } from "@turbo/gen";
 
const customAction: PlopTypes.CustomActionFunction = async (answers) => {
  // fetch data from a remote API
  const results = await fetchRemoteData();
  // add the response to the answers, making this data available to actions
  answers.results = results;
  // return a status string
  return 'Finished data fetching!';
}
 
export default function generator(plop: PlopTypes.NodePlopAPI): void {
  // create a generator
  plop.setGenerator("Generator name", {
    description: "Generator description",
    prompts: [
      ...
    ],
    actions: [
      customAction
      {/* actions now have access to `answers.results` */}
      ...
    ],
  });
}

執行產生器

建立產生器設定檔後,您可以略過選取提示,並使用下列命令直接執行指定的產生器

終端機
turbo gen [generator-name]

引數也可以使用 --args 直接傳遞至產生器提示

終端機
turbo gen [generator-name] --args answer1 answer2 ...

如需更多資訊,請參閱 Plop 文件中的略過提示

檢視 gen 的所有可用選項

小時

總計節省的運算時間
開始使用
遠端快取 →

本頁內容