建立內部程式碼包
內部程式碼包是您工作區的建構區塊,為您提供一個強大的方式,在您的程式碼庫中共享程式碼和功能。Turborepo 會自動理解內部程式碼包之間的關係,使用 package.json
中的依賴項,在底層建立一個程式碼包圖來優化您儲存庫的工作流程。
讓我們使用程式碼包的結構章節和編譯的程式碼包模式中的指南,建立您的第一個內部程式碼包,以在您的程式碼庫中共享數學工具。在以下步驟中,我們假設您已使用 create-turbo
建立了一個新的儲存庫,或是使用結構相似的儲存庫。
新增 package.json
接下來,為程式碼包建立 package.json
。透過新增此檔案,您將滿足內部程式碼包的兩個要求,使其可被 Turborepo 和您工作區的其他部分發現。
讓我們逐項分析這個 package.json
scripts
:dev
和build
指令碼使用 TypeScript 編譯器編譯程式碼包。dev
指令碼將監視原始程式碼的變更,並自動重新編譯程式碼包。devDependencies
:typescript
和@repo/typescript-config
是devDependencies
,因此您可以在@repo/math
程式碼包中使用這些程式碼包。在實際的程式碼包中,您可能會擁有更多devDependencies
和dependencies
- 但現在我們可以保持簡單。exports
:為程式碼包定義多個進入點,以便在其他程式碼包中使用(import { add } from '@repo/math'
)。
值得注意的是,此 package.json
將內部程式碼包 @repo/typescript-config
宣告為依賴項。Turborepo 會將 @repo/math
識別為 @repo/typescript-config
的依賴項,以便排序您的任務。
新增 tsconfig.json
透過將 tsconfig.json
檔案新增到程式碼包的根目錄,來指定此程式碼包的 TypeScript 設定。TypeScript 具有extends
鍵,允許您在整個儲存庫中使用基本設定,並在需要時使用不同的選項覆寫。
您在這裡完成了四件重要的事情
- 位於
./packages/typescript-config
中的@repo/typescript-config/base.json
設定具有您需要的所有設定,因此您會從它擴充。 compilerOptions
中的outDir
鍵告訴 TypeScript 將編譯的輸出放置在哪裡。它符合package.json
中exports
中指定的目錄。compilerOptions
中的rootDir
鍵確保outDir
中的輸出使用與src
目錄相同的結構。- 根據 TypeScript 規格,
include
和exclude
鍵不會從基本設定繼承,因此您在此處包含它們。
還有更多關於 TypeScript 設定的知識需要學習,但這是一個好的開始。如果您想了解更多資訊,請造訪 官方 TypeScript 文件或我們的 TypeScript 指南。
新增包含原始程式碼的 src
目錄
您現在可以為您的程式碼包編寫一些程式碼。在 src
目錄中建立兩個檔案
這些檔案會對應到當您稍後執行 turbo build
時,tsc
將建立的輸出。
將程式碼包新增到應用程式
您已準備好在應用程式中使用新的程式碼包。讓我們將它新增到 web
應用程式。
您剛剛變更了儲存庫中的依賴項。請務必執行您的程式碼包管理員的安裝指令,以更新您的鎖定檔。
@repo/math
現在可以在 web
應用程式中使用,您可以在您的程式碼中使用它
編輯 turbo.json
將新的 @repo/math
函式庫的成品新增到 turbo.json
中 build
任務的 outputs
。這可確保其建置輸出將由 Turborepo 快取,因此當您開始執行建置時,可以立即還原它們。
執行 turbo build
如果您已全域安裝 turbo
,請在您的工作區根目錄的終端機中執行 turbo build
。您也可以使用您的程式碼包管理員從 package.json
執行 build
指令碼,這將使用 turbo run build
。
@repo/math
程式碼包在 web
應用程式建置之前建置,以便 ./packages/math/dist
中的執行階段程式碼在 web
應用程式捆綁時可用。
您可以再次執行 turbo build
,以查看您的 web
應用程式在毫秒內重建。我們將在快取指南中詳細討論這一點。
內部程式碼包的最佳實務
每個程式碼包一個「用途」
當您建立內部程式碼包時,建議建立具有單一「用途」的程式碼包。這不是嚴格的科學或規則,而是一種最佳實務,取決於您的儲存庫、您的規模、您的組織、您的團隊的需求等等。此策略有幾個優點
- 更容易理解:隨著儲存庫的規模擴大,在儲存庫中工作的開發人員將更容易找到他們需要的程式碼。
- 減少每個程式碼包的依賴項:每個程式碼包使用較少的依賴項,使 Turborepo 可以更有效地修剪您的程式碼包圖的依賴項。
一些範例包括
@repo/ui
:一個包含所有共用 UI 元件的程式碼包@repo/tool-specific-config
:一個用於管理特定工具設定的程式碼包@repo/graphs
:一個用於建立和操作圖形資料的特定網域函式庫
應用程式程式碼包不包含共用程式碼
當您建立應用程式程式碼包時,最好避免將共用程式碼放入這些程式碼包中。相反地,您應該為共用程式碼建立一個單獨的程式碼包,並讓應用程式程式碼包依賴該程式碼包。
此外,應用程式程式碼包不應安裝到其他程式碼包中。相反地,它們應該被視為您程式碼包圖的進入點。
要知道
此規則有極少數例外情況。
後續步驟
建立新的內部程式碼包後,您可以開始設定任務。
這對您有幫助嗎?