單一儲存庫的開發工作
絕大多數的開發工作流程如下
- 開啟儲存庫
- 在開發期間執行
dev
工作 - 在一天結束時,關閉
dev
工作並關閉儲存庫。
dev
可能會是儲存庫中最常執行的工作,因此正確執行非常重要。
dev
工作類型
dev
工作有許多不同的形狀和大小
- 為網路應用程式執行本機開發伺服器
- 執行
nodemon
(在新分頁中開啟),以便在每次程式碼變更時重新執行後端程序 - 在
--watch
模式下執行測試
使用 Turborepo 設定
您應該在 turbo.json
中指定 dev
工作。
{
"pipeline": {
"dev": {
"cache": false,
"persistent": true
}
}
}
由於 dev
任務不會產生輸出,因此 outputs
為空。 dev
任務的另一個獨特之處在於,您很少需要 快取 它們,因此我們將 cache
設定為 false
。我們還將 persistent
設定為 true
,因為 dev
任務是執行時間長的任務,我們希望確保它不會阻擋任何其他任務執行。
設定 package.json
您還應該在根目錄的 package.json
中提供 dev
任務
{
"scripts": {
"dev": "turbo run dev"
}
}
這讓開發人員能夠直接從他們的正常任務執行器執行任務。
在 dev
之前 執行任務
在某些工作流程中,您會希望在執行 dev
任務之前執行任務。例如,產生程式碼或執行 db:migrate
任務。
在這些情況下,使用 dependsOn
表示任何 codegen
或 db:migrate
任務都應該在執行 dev
之前執行。
{
"pipeline": {
"dev": {
"dependsOn": ["codegen", "db:migrate"],
"cache": false
},
"codegen": {
"outputs": ["./codegen-outputs/**"]
},
"db:migrate": {
"cache": false
}
}
}
然後,在您的應用程式 package.json
{
"scripts": {
// For example, starting the Next.js dev server
"dev": "next",
// For example, running a custom code generation task
"codegen": "node ./my-codegen-script.js",
// For example, using Prisma
"db:migrate": "prisma db push"
}
}
這表示使用您 dev
任務的使用者不需要擔心程式碼產生或資料庫遷移 - 在他們的開發伺服器啟動之前,這些都會幫他們處理好。
僅在特定工作區執行 dev
假設您想要在位於 <root>/apps/docs
的 docs
工作區執行 dev
任務。 turbo
可以從您的目錄推論出工作區,因此如果您執行
cd <root>/apps/docs
turbo run dev
turbo
會自動偵測您在 docs
工作區中,並執行 dev
任務。
若要從儲存庫中的任何其他位置執行相同的任務,請使用 --filter
語法。例如
turbo run dev --filter docs
執行設定任務
在持續執行且長時間執行的開發任務執行之前,您可能需要執行一些任務。設定步驟的一些範例如下
- 預先建置套件
- 設定 Docker 容器
- 檢查 Node 或套件管理員版本
如果您將這些設定任務命名為 dev
,您將在 turbo.json
中與持續性任務發生命名衝突。您可以將這些設定任務重新命名為 setup-dev
,並讓 dev
任務依賴於這些 setup-dev
任務
{
"pipeline": {
"dev": {
"dependsOn": [
// Wait for tasks in dependencies
"^setup-dev"
// Wait for tasks in same package
"setup-dev"
// Wait for `setup-dev` in a specific package
"my-package#setup-dev"
],
},
"setup-dev": {},
}
}
使用環境變數
在開發期間,你經常需要使用環境變數。這些變數可讓你自訂程式行為,例如在開發和製作時指向不同的 DATABASE_URL
。
我們建議使用名為 dotenv-cli
(在新分頁開啟) 的函式庫來解決這個問題。
我們希望每個開發人員都能在使用 Turbo 時獲得絕佳體驗。以下說明的方法不符合這些標準。
我們正在針對這個問題制定一流的解決方案,但在等待期間,以下為次佳解決方案。
教學
- 在你的 根工作區 安裝
dotenv-cli
# Installs dotenv-cli in the root workspace
npm add dotenv-cli
- 將
.env
檔案新增到你的根工作區
├── apps/
├── packages/
+ ├── .env
├── package.json
└── turbo.json
新增任何你需要注入的環境變數
DATABASE_URL=my-database-url
- 在你的根
package.json
中,新增一個dev
腳本。在前面加上dotenv
和--
參數分隔符號
{
"scripts": {
"dev": "dotenv -- turbo run dev"
}
}
這會在執行 turbo run dev
之前,從 .env
中萃取環境變數。
- 現在,你可以執行你的開發腳本
npm run dev
環境變數也會填入!在 Node.js 中,這些變數可於 process.env.DATABASE_URL
中取得。
如果您使用環境變數來建置應用程式,您也應該將環境變數 新增到 turbo.json
中。