Turborepo

單一套件工作區

雖然 Turborepo 在多套件工作區(通常稱為 monorepo)中非常有效,但它也可以用於加速單一套件工作區

Turborepo 最重要的功能在單一套件工作區中也有效,包括本機和遠端快取以及任務平行化。無法運作的功能是那些在單一套件的上下文中沒有意義的功能,例如套件任務 (app#build)。

要知道

單一套件工作區的範例是 npx create-next-appnpm create vite 的輸出。

安裝

turbo 安裝到您的應用程式中

終端機
npm install turbo --save-dev

使用全域 turbo 執行 package.json 腳本 (選用)

為了獲得更快的開發人員工作流程,您也可以全域安裝 turbo,並直接從命令列執行命令。

安裝完成後,您可以執行 turbo build,Turborepo 將會從 package.json 執行您的 build 腳本。再次執行 turbo build 將會命中快取。

此時,turbo 並沒有提供太多價值,因為您很可能只會在程式碼變更時重建您的應用程式,而且當您的程式碼變更時,turbo 將會錯過快取。只需兩個簡單的步驟,您就可以從 turbo 中獲得更多。

使用一個命令執行多個腳本

在許多儲存庫中,有一些設定任務或預先建置步驟需要執行。這些任務通常一次執行一個 - 但您可以使用 turbo 輕鬆地將它們變成一個腳本。

例如,假設您有一個專案,在每次開始工作時都必須設定開發環境。您需要

  1. 啟動資料庫的 Docker 容器。
  2. 將資料庫結構描述推送至資料庫。
  3. 使用資料種子資料庫。
  4. 啟動開發伺服器。

您可以使用 Turborepo 將這些任務排程到一個命令中。首先,在您的 package.json 中建立腳本

package.json
{
  "name": "@acme/my-app",
  "version": "0.0.0",
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint",
    "check-types": "tsc --noEmit",
    "db:up": "docker-compose up -d",
    "db:push": "your-orm-tool schema-push",
    "db:seed": "node ./db-seed.js"
  }
}

然後,在 turbo.json 中建立任務,以依序執行這些腳本

./turbo.json
{
  "tasks": {
    "dev": {
      "dependsOn": ["db:seed"],
      "cache": false,
      "persistent": true
    },
    "db:seed": {
      "dependsOn": ["db:push"],
      "cache": false
    },
    "db:push": {
      "dependsOn": ["db:up"],
      "cache": false
    },
    "db:up": {
      "cache": false
    }
  }
}

上述任務中的 dependsOn 陣列會為任務建立順序。當您執行 turbo dev 時 (作為 package.json 腳本或在您的終端機中),

平行化任務

使用 turbo 來平行化任務可以透過同時執行所有任務(在可以的情況下)來加速任務。例如,您可以同時執行您的 ESLint、TypeScript 和 Prettier 檢查。假設有如下腳本

./package.json
{
  "scripts": {
    "lint": "eslint .",
    "format": "prettier .",
    "check-types": "tsc --noEmit"
  }
}

您可以建立如下的設定

turbo.json
{
  "tasks": {
    "lint": {},
    "format": {},
    "check-types": {}
  }
}

然後,同時執行所有任務

終端機
turbo check-types lint format

使用輸入最佳化任務

由於 Turborepo 會將單一套件工作區視為一個套件,因此它可以幫助您最佳化任務的輸入,以確保不相關的變更不會產生快取遺失。

例如,可以使用僅包含 TypeScript 檔案的輸入來設定使用 tsc --noEmit 檢查類型的腳本

./turbo.json
{
  "tasks": {
    "check-types": {
      "inputs": ["**/*.{ts,tsx}"]
    }
  }
}

小時

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

本頁內容