monorepo + Turborepo --- 開發應用程序

目錄

配置開發任務

在 `dev` 之前運行設置任務

運行特定應用程序

使用終端 UI

與任務交互

監聽模式

watch

將 turbo watch 與持久任務一起使用

依賴感知的持久任務

沒有依賴感知的持久任務

緩存

任務輸出

局限性


在 Monorepo 中開發應用程序可以解鎖強大的工作流程,使你能夠進行原子提交到源代碼控制,并輕松訪問代碼。

大多數開發任務都是長時間運行的任務,它們會監視代碼的更改。Turborepo 通過強大的終端 UI 和其他功能(例如)增強了這種體驗

配置開發任務

在 `turbo.json` 中定義一個開發任務會告訴 Turborepo 你將要運行一個長時間運行的任務。這對于運行開發服務器、運行測試或構建應用程序等操作非常有用。

要注冊一個 `dev` 任務,請將其添加到你的 `turbo.json` 中,并帶有兩個屬性

{"tasks": {"dev": {"cache": false,"persistent": true}}
}
  • "cache": false: 告訴 Turborepo 不要嘗試緩存任務的結果。由于這是一個開發任務,你可能會頻繁更改代碼,因此緩存結果沒有用處。
  • "persistent": true: 告訴 Turborepo 讓任務持續運行直到你停止它。這個鍵作為終端 UI 的信號,將該任務視為長時間運行且可交互的任務。此外,它可以防止你意外地依賴于一個不會退出的任務。

現在你可以運行你的 `dev` 任務以并行啟動你的開發腳本

turbo dev

在 `dev` 之前運行設置任務

你可能還想運行一些腳本來設置你的開發環境或預構建軟件包。你可以使用 `dependsOn` 確保這些任務在 `dev` 任務之前運行

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

在這個例子中,我們使用了 根任務,但你也可以將相同的想法用于 軟件包中的任意任務。

運行特定應用程序

`--filter` 標志允許你選擇你的 軟件包圖 的子集,以便你可以為特定的應用程序及其依賴項運行你的 `dev` 任務

turbo dev --filter=web

使用終端 UI

Turborepo 的終端 UI 啟用了一些功能,這些功能圍繞你的任務創建了高度交互的體驗。

自定義你的視圖

你可以使用快捷鍵快速調整 UI 以滿足你的需求。

與任務交互

你的一些工具可能允許你向其中鍵入輸入。例如 Drizzle ORM 的交互式遷移或 Jest 的測試套件的過濾和重新運行。

你可以與 標記為交互式 的任務進行交互,以便向它們提供輸入。

persistent

將任務標記為 persistent 以防止其他任務依賴于長時間運行的進程。 默認情況下,持久任務是 交互式 的。

{"tasks": {"dev": {"persistent": true}}
}

由于長時間運行的進程不會退出,因此依賴于它的任務永遠不會運行 一旦你將任務標記為持久,如果其他任務依賴于它,turbo?將拋出錯誤。

監聽模式

許多工具都有內置的監聽器,例如 `tsc --watch`,它們會對源代碼中的更改做出響應。但是,有些工具沒有。

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

例如,使用像 `create-turbo` 這樣的包結構,以及以下任務和腳本

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

}

當你運行 `turbo watch dev lint` 時,你會看到每當你更改源代碼時,`lint` 腳本都會重新運行,盡管 ESLint 沒有內置監聽器。`turbo watch` 也知道內部依賴關系,因此 `@repo/ui` 中的代碼更改將重新運行 `@repo/ui` 和 `web` 中的任務。

`web` 中的 Next.js 開發服務器和 `@repo/ui` 中 TypeScript 編譯器的內置監聽器將繼續像往常一樣工作,因為它們被標記為 `persistent`。

watch

基于代碼更改,重新運行倉庫中的任務。

turbo watch [tasks]

turbo watch 具有依賴感知能力,意味著任務將按照 在 turbo.json 中配置的順序 重新運行。

如果沒有提供任務,turbo 將顯示倉庫中軟件包可用的任務。、

turbo watch

將 turbo watch 與持久任務一起使用

持久任務標記為 "persistent": true,意味著它們不會退出。因此,它們不能在你的任務圖中被依賴。

這意味著當使用 turbo watch 時,持久任務將被忽略,其工作方式與 turbo run 相同,允許同時運行持久任務和非持久任務。

依賴感知的持久任務

當你的腳本具有內置的監視器(如 next dev),能夠檢測依賴項中的更改時,你不需要使用 turbo watch。 相反,使用腳本的內置監視器并將任務標記為長時間運行,使用 "persistent": true。

沒有依賴感知的持久任務

某些工具對 monorepo 不友好,并且不熱重載依賴項中的模塊。 在這些情況下,你應該將任務標記為 interruptible: true,以便在檢測到相關更改時,turbo watch 重新啟動任務。

turbo watch?監視你的包的更改并自動重新啟動受影響的任務。 但是,如果任務是持久的,則默認情況下不會重新啟動。 要啟用重新啟動持久任務,請將?interruptible?設置為?true

緩存

使用 Watch Mode 緩存任務目前是實驗性的,在 --experimental-write-cache 標志下。

turbo watch your-tasks --experimental-write-cache

任務輸出

如果你的任務寫入檢入到源代碼控制的文件,則 Watch Mode 有可能進入無限循環。 這是因為 Watch Mode 監視你的文件更改,并將重新運行已更改軟件包中的任務。 如果任務創建了更改,那么這將再次觸發該任務。

Watch Mode 具有一些邏輯來防止這種情況發生,使用文件哈希,但這并非萬無一失。 為了避免這個問題,我們建議從 git 中刪除任何任務輸出。?

局限性

清理任務

在某些情況下,你可能希望在 `dev` 任務停止時運行一個腳本。Turborepo 無法在退出時運行這些清理腳本,因為當你的 `dev` 任務退出時,`turbo` 也會退出。

相反,創建一個 `turbo dev:teardown` 腳本,在你退出主要的 `turbo dev` 任務后單獨運行它。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/88111.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/88111.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/88111.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C#字符串相關庫函數運用梳理總結 + 正則表達式詳解

C# 字符串常用庫函數總結 🔹 1. 字符串比較 方法說明示例string.Equals()比較兩個字符串是否相等(可忽略大小寫)string.Equals("abc", "ABC", StringComparison.OrdinalIgnoreCase) / !判斷兩個字符串是否相等/不等&quo…

投機采樣(Speculative Decoding)

投機采樣(Speculative Decoding) 是一種加速大型語言模型(LLM)推理的技術,其核心思想是通過預生成候選token序列并異步校驗,從而減少主模型的計算量,同時保持生成結果的準確性。 核心思想是通過…

如何將華為手機中的照片傳輸到電腦

華為手機在眾多手機品牌中以其出色的品質脫穎而出,尤其是其攝像頭功能。有時,你可能在華為手機上積累了太多有意義的照片,想要將這些照片上傳到電腦以釋放手機存儲空間。然而,出于用戶信息安全的考慮,一些便捷的方法可…

whitt算法之特征向量的尺度

whitt中特征值不相等判別條件另一個條件的意思, 實際上這兩個條件都沒用,不用看,特征值排序,如果現在順序對λ1/λ1‘ w λ2/λ2 -w 此時取相位就是0,最小了 如果相反就是面的是0我的代碼用最優相位內積去交換位置公…

【Note】《深入理解Linux內核》 第十九章:深入理解 Linux 進程通信機制

《深入理解Linux內核》 第十九章:深入理解 Linux 進程通信機制(Process Communication)關鍵詞:IPC、信號、管道、FIFO、消息隊列、信號量、共享內存、套接字、內核對象、同步機制一、進程通信概述 1.1 為什么需要進程通信 在 Linu…

【Mac 從 0 到 1 保姆級配置教程 19】- 英語學習篇-我的英語工作流分享(AI 輔助學習)

文章目錄前言聽力沉浸式翻譯閱讀Easydict配置自定義字典(重點)歐陸詞典沙拉查詞沉浸式翻譯寫作Eearthworm英文提問口語最后學習資料系列教程前言 本文介紹一下我日常如何學習和使用英語的工作流,包括一些常用好用的工具,好的工具…

從庫函數到API接口,深挖不同語言背后的“封裝”與“調用”思想

個人主頁-愛因斯晨 優秀文章推薦 文章目錄個人主頁-愛因斯晨優秀文章推薦引言一、三種調用機制概述C語言的庫函數Python 的導包機制Java 的 API 接口調用綜上:二、它們的相同點:封裝與調用三、不同之處**對比核心維度****細節串講**1. **C 語言&#xf…

基于NCNN框架在Android平臺實現YOLOv8目標檢測模型的高效部署與實踐

隨著移動設備計算能力的提升,越來越多的深度學習模型被部署到移動端,以實現實時、低延遲的應用場景。YOLO系列的在目標檢測任務中表現出色,具有精度高、速度快的優勢。本文將詳細介紹如何基于NCNN框架 ,在Android平臺 上高效部署Y…

華為動態路由配置

問題描述:針對四個路由器在不同的網段場景中,對四個路由器進行動態路由配置。下面以如下場景為例,介紹詳細配置過程。配置過程: 1、每個路由器的接口配置IP地址 路由器AR1中每個接口配置IP地址。 sys # 進入系統視圖 interface g…

分布式事務解決方案(三)

在Java分布式系統領域,傳統強一致性方案(如2PC、3PC)在高并發、復雜業務場景下暴露出性能瓶頸和阻塞問題。而Saga模式與事件溯源(Event Sourcing)作為更具彈性和擴展性的解決方案,逐漸成為分布式事務處理和…

【時時三省】(C語言基礎)通過指針引用數組

山不在高,有仙則名。水不在深,有龍則靈。 ----CSDN 時時三省數組元素的指針一個變量有地址,一個數組包含若干元素,每個數組元素都在內存中占用存儲單元,它們都有相應的地址。指針變量既然可以指向變量,當然…

【WEB】Polar靶場 21-25題 詳細筆記

二十一.php very nicephp又是你 ,但是經過這么多次折磨后我感覺我已經有一點抗性了老規矩,先看知識點PHP 序列化是將 PHP 變量(如對象、數組)轉換為字符串的過程,便于存儲或傳輸。反序列化則是將字符串還原為原始變量。這在緩存、…

【Guava】1.0.設計虛擬機的方向

【Guava】1.0.設計虛擬機的方向虛擬機是什么?棧式虛擬機棧式虛擬機的優缺點題外話虛擬機是什么? 虛擬機(VirtualMachine, VM)是一種計算機程序或系統,它通過軟件模擬物理計算機的硬件運行環境,使得多個操作…

[附源碼+數據庫+畢業論文]基于Spring+MyBatis+MySQL+Maven+jsp實現的高校實驗室資源綜合管理系統,推薦!

摘 要 現代經濟快節奏發展以及不斷完善升級的信息化技術,讓傳統數據信息的管理升級為軟件存儲,歸納,集中處理數據信息的管理方式。本高校實驗室資源綜合管理系統就是在這樣的大環境下誕生,其可以幫助管理者在短時間內處理完畢龐大…

Spring Boot:影響事務回滾的幾種情況

一、Controller 捕獲異常導致事務失效 需求 我們有一個用戶注冊服務,注冊時需要: 創建用戶賬戶分配初始積分發送注冊通知 這三個操作需要在同一個事務中執行,任何一步失敗都要回滾。 錯誤示例:Controller 捕獲異常導致事務失效 Re…

如何避免分布式爬蟲被目標網站封禁?

在分布式爬蟲的大規模數據采集場景中,避免被目標網站封禁的核心邏輯是:通過技術手段模擬真實用戶行為,降低爬蟲行為的可識別性,同時建立動態適配機制應對網站反爬策略的升級。以下從請求偽裝、行為控制、資源管理、反爬對抗四個維…

Maven 打包排除特定依賴的完整指南(詳細方法 + 示例)

前言 在使用 Maven 構建 Java 項目時,我們常常需要對項目的打包過程進行精細化控制,尤其是希望排除某些特定的依賴庫。這可能是為了減小最終構建產物的體積、避免版本沖突,或者僅僅是為了滿足不同環境下的部署需求。 本文將詳細介紹如何在 Ma…

Terraform `for_each` 精講:優雅地自動化多域名證書驗證

大家好,在云原生和自動化運維的世界里,Terraform無疑是基礎設施即代碼(IaC)領域的王者。它強大的聲明式語法讓我們能夠輕松地描述和管理云資源。然而,即使是經驗豐富的工程師,在面對某些動態場景時也可能會…

C++標準庫中各種互斥鎖的用法 mutex

示例 僅供參考學習 #include <mutex> #include <shared_mutex> #include <thread> #include <chrono> #include <iostream> #include <vector>// // 1. std::mutex - 基本互斥鎖 // void basic_mutex_example() {std::mutex mtx;int cou…

Android Handler機制與底層原理詳解

Android 的 Handler 機制是跨線程通信和異步消息處理的核心框架&#xff0c;它構成了 Android 應用響應性和事件驅動模型的基礎&#xff08;如 UI 更新、后臺任務協調&#xff09;。其核心思想是 “消息隊列 循環處理”。 核心組件及其關系Handler (處理器): 角色: 消息的發送…