Turborepo

開發應用程式

在單一儲存庫中開發應用程式可釋放強大的工作流程,讓您能對原始碼控制進行原子提交,並輕鬆存取程式碼。

大多數開發任務都是長時間執行的任務,會監看程式碼的變更。Turborepo 透過強大的終端 UI 和其他功能(例如)來增強這種體驗

設定開發任務

turbo.json 中定義開發任務會告知 Turborepo 您將執行長時間執行的任務。這適用於執行開發伺服器、執行測試或建置應用程式等作業。

若要註冊 dev 任務,請將其新增至您的 turbo.json 中,並包含兩個屬性

./turbo.json
{
  "tasks": {
    "dev": {
      "cache": false,
      "persistent": true
    }
  }
}
  • "cache": false:告知 Turborepo 不要嘗試快取任務的結果。由於這是開發任務,因此您可能會頻繁地變更程式碼,因此快取結果並無用處。
  • "persistent": true:告知 Turborepo 讓任務保持執行,直到您停止它為止。此金鑰是終端 UI 將任務視為長時間執行且互動式的訊號。此外,它可防止您意外依賴不會結束的任務。

您現在可以執行 dev 任務以平行啟動開發指令碼

終端
turbo dev

與任務互動

某些指令碼允許您使用 stdin 輸入來與其互動。使用終端 UI,您可以選取任務、輸入它,並像平常一樣使用 stdin

任務必須是互動式才能啟用此功能。

dev 之前執行設定任務

您可能也會想要執行設定開發環境或預先建置套件的指令碼。您可以使用 dependsOn 來確保這些任務在 dev 任務之前執行

./turbo.json
{
  "tasks": {
    "dev": {
      "cache": false,
      "persistent": true,
      "dependsOn": ["//#dev:setup"]
    },
    "//#dev:setup": {
      "outputs": [".codegen/**"]
    }
  }
}

在此範例中,我們使用的是根任務,但您可以將相同的概念用於套件中的任意任務

執行特定的應用程式

--filter 旗標可讓您選取套件圖的子集,以便您可以針對特定應用程式及其相依性執行 dev 任務

終端
turbo dev --filter=web

監看模式

許多工具都有內建監看器,例如tsc --watch,它會回應原始碼中的變更。但是,有些工具沒有。

turbo watch 會將具備相依性感知功能的監看器新增至任何工具。原始碼的變更將遵循您在 turbo.json 中描述的任務圖,就像您的所有其他任務一樣。

例如,使用具有下列任務和指令碼的套件結構,例如create-turbo

turbo.json
{
  "tasks": {
    "dev": {
      "persistent": true,
      "cache": false
    },
    "lint": {
      "dependsOn": ["^lint"]
    }
  }
}

當您執行 turbo watch dev lint 時,您會看到每當您變更原始碼時,都會重新執行 lint 指令碼,即使 ESLint 沒有內建監看器也一樣。turbo watch 也會感知內部相依性,因此 @repo/ui 中的程式碼變更將重新執行 @repo/uiweb 中的任務。

web 中的 Next.js 開發伺服器和 @repo/ui 中 TypeScript 編譯器的內建監看器將繼續像平常一樣運作,因為它們已標記為 persistent

如需詳細資訊,請造訪 turbo watch 參考

限制

終止任務

在某些情況下,您可能會想要在 dev 任務停止時執行指令碼。Turborepo 無法在結束時執行這些終止指令碼,因為當您的 dev 任務結束時,turbo 會結束。

相反地,請建立一個 turbo dev:teardown 指令碼,在您結束主要 turbo dev 任務後單獨執行它。

後續步驟

當您擁有想要部署的應用程式版本後,就該學習如何在 Turborepo 中設定環境變數了。

小時

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

本頁內容