在單一倉庫(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 中重新運行任務。