iT邦幫忙

2024 iThome 鐵人賽

DAY 7
0
自我挑戰組

讓我們一起與turboRepo共舞系列 第 7

那我們如何避免重複打包嗎

  • 分享至 

  • xImage
  •  

turbo.jsonTurborepo 將始終按照您的配置Package Graph中描述的順序運行任務,盡可能並行化工作,以確保一切盡可能快地運行。這比一次運行一個任務要快,這也是 Turborepo 如此快的原因之一。

定義任務

物件中的每個鍵tasks都是一個可以由 執行的任務turbo run。 Turborepo 將package.json您的套件中搜尋與任務同名的腳本。

若要定義任務,請使用中turbo.json。例如,沒有依賴項且沒有指定輸出的基本任務build可能如下所示:

  • turbo run build如果此時運行,Turborepo 將並行運行build套件中的所有腳本,並且不會快取任何檔案輸出。這很快就會導致錯誤。

    // ./turbo.json
    {  "tasks": {    "build": {} // Incorrect!  }}
    
  • 以正確的順序運行任務

    dependsOn用於指定在不同任務開始運行之前必須完成的任務。例如,在大多數情況下,您希望build庫的腳本在應用程式的腳本運行之前完成build。為此,您可以使用以下命令turbo.json

  • 取決於依賴項中的任務^

    ^語法告訴 Turborepo 從依賴圖的底部開始執行任務。如果您的應用程式依賴名為 的庫ui,並且該庫有一個build任務,build則 中的腳本將首先ui執行。成功完成後,應用程式中的任務將運行。build

    這是一個重要的模式,因為它確保應用程式的build任務將具有編譯所需的所有必要依賴項。當您的依賴關係圖成長為具有多個層級的任務依賴關係的更複雜的結構時,此概念也適用。

  • 取決於同一個包中的任務

    有時,您可能需要確保同一包中的兩個任務按特定順序運行。例如,您可能需要先執行build庫中的任務,然後再執行test同一庫中的任務。為此,請將dependsOn金鑰中的腳本指定為純字串(不含^)。

// ./turbo.json
{  "tasks": {    "test": {      "dependsOn": ["build"]     }  }}

當您需要確保同一個套件(package)中的兩個任務按特定順序運行時,您可以通過 dependsOn 鍵來指定依賴關係。這裡將通過一些例子來說明如何配置這些依賴關係,讓任務間的執行更加有序。

在同一個套件中設置任務依賴

假如您有一個庫,在這個庫中,您需要先執行建置(build)任務,然後再運行測試(test)任務。您可以在 turbo.json 配置文件中像這樣指定:

{
  "tasks": {
    "test": {
      "dependsOn": ["build"]
    }
  }
}

在這個配置中,test 任務將依賴於 build 任務的完成。

跨套件指定特定任務依賴

您也可以指定某個具體套件中的任務作為依賴。例如,如果您希望在進行任何檢查代碼格式(lint)任務之前必須先完成 utils 套件中的建置(build)任務,可以這樣配置:

{
  "tasks": {
    "lint": {
      "dependsOn": ["utils#build"]
    }
  }
}

這樣設置後,任何 lint 任務都必須等待 utils 套件中的 build 任務完成才能開始。

進一步限定依賴任務的套件

您可以更具體地指定依賴任務,限制它僅屬於某個特定套件。例如,如果只有 web 套件的 lint 任務需要依賴 utils 套件的建置(build)任務:

{
  "tasks": {
    "web#lint": {
      "dependsOn": ["utils#build"]
    }
  }
}

根據這項配置,web 套件的 lint 任務將只能在 utils 套件的 build 任務完成後開始執行。

任務無依賴

有些任務可能不需要任何依賴,比如一個用於檢查 Markdown 文件中拼寫錯誤的任務,可能不需要關心其他任務的狀態。在這種情況下,您可以省略 dependsOn 鍵或提供一個空數組:

{
  "tasks": {
    "spell-check": {
      "dependsOn": []
    }
  }
}

這樣配置後,spell-check 任務就可以獨立運行,不依賴於其他任務的完成狀態。

這些配置方法可以幫助您更有效地管理和調度多個任務,確保它們按正確的順序執行,從而提高工作效率。

在使用 Turborepo 管理專案時,對任務的輸出和輸入進行精確設定是非常重要的。這些設定有助於確保任務高效執行,並且有效利用缓存機制。下面我們將介紹如何配置這些參數。


上一篇
真的懂turboRepo嗎?
下一篇
turboRepo專案架構
系列文
讓我們一起與turboRepo共舞13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言