iT邦幫忙

2024 iThome 鐵人賽

DAY 11
0

在單一倉庫(monorepo)中開發應用程序能夠解鎖強大的工作流程,使您能夠進行原子提交到源控制,並輕鬆訪問代碼。

大多數開發任務都是長時間運行的任務,會監控代碼的變更。Turborepo 通過強大的終端用戶界面和其他功能如下來增強這種體驗:

  • 配置開發任務
  • 與任務互動
  • 監視模式
  • 運行設置腳本
  • 過濾任務以運行部分套件

配置開發任務

turbo.json 中定義一個開發任務,告訴 Turborepo 這是一個長期運行的任務。這對於運行開發服務器、執行測試或構建應用程序等都很有用。

要註冊一個開發任務,請將其添加到你的 turbo.json,具有兩個屬性:

{
  "tasks": {
    "dev": {
      "cache": false,
      "persistent": true
     }
  }
}
  • "cache": false:告訴 Turborepo 不嘗試緩存任務的結果。由於這是一個開發任務,你可能會經常更改代碼,所以緩存結果沒有用處。
  • "persistent": true:告訴 Turborepo 保持任務運行直到你停止它。這個鍵是為你的終端用戶界面提供一個信號,將任務視為長時間運行和交互式的,同時防止你不小心依賴一個不會退出的任務。

現在,你可以運行你的開發任務來並行啟動你的開發腳本:

turbo dev

與任務互動

一些腳本允許你通過 stdin 進行交互輸入。使用終端用戶界面,你可以選擇一個任務,進入它,並像平時一樣使用 stdin。

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

交互式任務設定

預設值false(對於標記為 persistent 的任務,預設值為 true

將任務標記為交互式,使其能夠在終端用戶界面中從 stdin 接受輸入。這需要與 persistent 一起使用。

這個任務對於可以在運行時被操作的腳本特別有用,如 Jest 或 Vitest。

{
  "tasks": {
    "test:watch": {
      "interactive": true,
      "persistent": true}
  }
}

在這個配置中,test:watch 任務被設置為交互式和持久,這意味著它將持續運行並且可以接受使用者在終端的輸入。這非常適合需要即時反饋和調整的測試或開發腳本。

在開發之前運行設置任務

你可能也想運行一些腳本來設置你的開發環境或預建套件。你可以使用 dependsOn 確保這些任務在開發任務之前運行:

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

在這個例子中,我們使用了一個根任務,但你可以對包內的任意任務使用同樣的想法。

運行特定應用

  • -filter 標誌允許你選擇你的套件圖的一部分,這樣你可以為特定應用及其依賴運行你的開發任務:
turbo dev --filter=web

監視模式

許多工具內建了像 tsc --watch 這樣的觀察者,會響應你源代碼的變化。然而,有些工具不具備這項功能。

turbo watch 為任何工具添加了一個依賴感知的觀察者。源代碼的更改將遵循你在 turbo.json 中描述的任務圖,就像你的所有其他任務一樣。

例如,使用如下任務和腳本的套件結構:

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

當你運行 turbo watch dev lint 時,你會看到當你對源代碼進行更改時,儘管 ESLint 沒有內建的觀察者,檢查腳本會重新運行。turbo watch 也意識到內部依賴,所以在 @repo/ui 中的代碼變更會在 @repo/ui 和 web 中重新運行任務。


上一篇
Turborepo cache 機制2
下一篇
Turborepo 環境變數
系列文
讓我們一起與turboRepo共舞30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言