Turborepo

產生程式碼

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

新增一個空的套件

在您的單一程式碼庫中新增一個新的空的應用程式或套件。

終端機
turbo gen workspace

檢視 gen workspace 的所有可用選項

複製現有套件

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

範例

透過複製您儲存庫中的現有套件,在您的單一程式碼庫中建立新的套件。

終端機
turbo gen workspace --copy

透過複製遠端套件,在您的單一程式碼庫中建立新的工作區。

終端機
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 從單一程式碼庫中的任何位置執行以下命令。

終端機
turbo gen

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

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

例如,以下說明具有三個產生器位置的單一程式碼庫

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 的所有可用選項

小時

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

本頁內容