將 Turborepo 加入現有的單一儲存庫
設定工作區
turbo
建立在工作區之上,這是一種從單一單一儲存庫套件管理多個套件的方式。Turborepo 與所有套件管理員的工作區實作相容。如需有關管理 Turborepo 工作區的更多資訊,請參閱 工作區 文件。
您可以隨意設定工作區,但常見的資料夾結構範例是將應用程式保留在 /apps
資料夾中,並將套件保留在 /packages
資料夾中。這些資料夾的設定會因套件管理員而異。
在單一儲存庫根目錄的 package.json
檔案中指定 workspaces
{
"workspaces": ["packages/*", "apps/*"]
}
設定工作區後,重新執行套件管理員的 install
指令。
安裝 turbo
全局安裝 turbo
。
npm install turbo --global
有關安裝的更多詳細資訊,請參閱 安裝 Turborepo
建立 turbo.json
在單一儲存庫的根目錄中,建立一個名為 turbo.json
的空檔案。這將會儲存 Turborepo 的組態。
{
"$schema": "https://turbo.dev.org.tw/schema.json"
}
建立 pipeline
若要定義單一儲存庫的任務相依圖,請在單一儲存庫根目錄的 turbo.json
組態檔案中使用 pipeline
關鍵字。 turbo
會根據此組態最佳化排程、執行和快取工作空間中定義的每個 package.json
指令碼的輸出。
在 pipeline
物件中的每個金鑰都是 turbo run
可以執行的 package.json
指令碼名稱。您可以使用 dependsOn
金鑰指定其相依性,以及一些與 快取 相關的其他選項。如需有關如何設定管線的更多資訊,請參閱 Pipelines
文件。
在 package.json
的 scripts
清單中未定義指定指令碼的工作區將會被 turbo
忽略。
{
"$schema": "https://turbo.dev.org.tw/schema.json",
"pipeline": {
"build": {
// A package's `build` script depends on that package's
// dependencies and devDependencies
// `build` tasks being completed first
// (the `^` symbol signifies `upstream`).
"dependsOn": ["^build"],
// note: output globs are relative to each package's `package.json`
// (and not the monorepo root)
"outputs": [".next/**", "!.next/cache/**"]
},
"deploy": {
// A package's `deploy` script depends on the `build`,
// `test`, and `lint` scripts of the same package
// being completed. It also has no filesystem outputs.
"dependsOn": ["build", "test", "lint"]
},
"test": {
// A package's `test` script depends on that package's
// own `build` script being completed first.
"dependsOn": ["build"],
// A package's `test` script should only be rerun when
// either a `.tsx` or `.ts` file has changed in `src` or `test` folders.
"inputs": ["src/**/*.tsx", "src/**/*.ts", "test/**/*.ts", "test/**/*.tsx"]
},
// A package's `lint` script has no dependencies and
// can be run whenever. It also has no filesystem outputs.
"lint": {},
"dev": {
"cache": false,
"persistent": true
}
}
}
給定套件的粗略執行順序是根據 dependsOn
金鑰
build
一旦其上游相依性執行其build
指令test
在其自己的build
指令完成且在封裝內沒有檔案系統輸出(只有記錄)後執行lint
以任意順序執行,因為它沒有上游相依性deploy
在其自己的build
、test
和lint
指令完成後執行。
執行後,完整的管線就可以執行
npx turbo run deploy
turbo
然後會排定每個任務的執行,以最佳化機器資源的使用。
編輯 .gitignore
將 .turbo
加入您的 .gitignore
檔案。CLI 使用這些資料夾作為記錄和特定任務輸出的用途。
+ .turbo
請確定您的任務成品、您想要快取的檔案和資料夾也包含在您的 .gitignore
中。
+ build/**
+ dist/**
+ .next/**
重新執行您的 npm 用戶端的 install
指令,以檢查您的組態。
建構您的單一儲存庫
turbo build
根據您的單一儲存庫設定,有些成品可能已經快取正確。在下一區段,我們將展示 turbo
如何運作,scope
如何運作,然後如何讓快取在之後運作。
組態遠端快取
Turborepo 速度的一大關鍵在於它既慵懶又有效率—它只做最少量的必要工作,並且它試圖永遠不重做已經完成的工作。
目前,Turborepo 快取您的任務在您的本機檔案系統上(也就是說,「單人模式」)。然而,如果有一種方法可以利用您的隊友或您的 CI 所做的運算工作(也就是說,「合作多人模式」)呢?如果有一種方法可以在機器間傳送和共用單一快取呢?幾乎就像您的 Turborepo 快取的「Dropbox」。
遠端快取已加入聊天。
Turborepo 可以使用一種稱為遠端快取的技術,在機器間共用快取成品,以獲得額外的速度提升。
遠端快取是 Turborepo 的強大功能,但能力越大,責任也越大。請先確定您已正確快取,並仔細檢查環境變數的處理方式。請也記得 Turborepo 會將記錄視為成品,因此請注意您在主控台上列印的內容。
將遠端快取用於本機開發
Turborepo 使用 Vercel(在新分頁開啟) 作為其預設的遠端快取提供者。如果您想將您的本機 turborepo 連結到您的遠端快取,您可以使用您的 Vercel 帳戶驗證 Turborepo CLI
turbo login
然後,將您的 turborepo 連結到您的遠端快取
turbo link
啟用後,對您目前正在快取的套件或應用程式進行一些變更,然後使用 turbo run
執行任務。您的快取成品現在將儲存在本機和您的遠端快取中。若要驗證是否運作正常,請刪除您的本機 Turborepo 快取
rm -rf ./node_modules/.cache/turbo
再次執行相同的建置。如果運作正常,turbo
不應在本機執行任務,而是從您的遠端快取下載記錄和成品,並將它們重播給您。
注意:連線到啟用 SSO 的 Vercel 團隊時,您必須提供團隊的 slug 作為 npx turbo login
的引數。
turbo login --sso-team=<team-slug>
後續步驟
您現在已開始使用 Turborepo,但仍有一些事情要做