Turborepo logo

單一套件工作區

雖然 Turborepo 在多套件工作區(通常稱為 monorepos)中非常有效,但它也可以用於使單一套件工作區更快。

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
{
  "$schema": "https://turbo.dev.org.tw/schema.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 時,將首先執行 db:updb:push,然後是 db:seed 的腳本。

平行化任務

使用 turbo 平行化任務可以通過同時運行所有任務(在它們可以同時運行時)來加速任務。例如,您可以同時運行 ESLint、TypeScript 和 Prettier 檢查。假設有如下腳本:

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

您可以建立如下配置:

turbo.json
{
  "$schema": "https://turbo.dev.org.tw/schema.json",
  "tasks": {
    "lint": {},
    "format": {},
    "check-types": {}
  }
}

然後,要同時運行所有任務

終端機
turbo check-types lint format

使用輸入優化任務

因為 Turborepo 會將單一套件工作區視為一個套件,所以優化任務的輸入可以幫助確保不相關的變更不會造成快取未命中。

例如,使用 tsc --noEmit 檢查類型的腳本可以配置為僅包含 TypeScript 檔案的輸入:

./turbo.json
{
  "$schema": "https://turbo.dev.org.tw/schema.json",
  "tasks": {
    "check-types": {
      "inputs": ["**/*.{ts,tsx}"]
    }
  }
}

小時

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

在本頁面