儲存庫
文件
開發工作

單一儲存庫的開發工作

絕大多數的開發工作流程如下

  1. 開啟儲存庫
  2. 在開發期間執行 dev 工作
  3. 在一天結束時,關閉 dev 工作並關閉儲存庫。

dev 可能會是儲存庫中最常執行的工作,因此正確執行非常重要。

dev 工作類型

dev 工作有許多不同的形狀和大小

  1. 為網路應用程式執行本機開發伺服器
  2. 執行 nodemon(在新分頁中開啟),以便在每次程式碼變更時重新執行後端程序
  3. --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 表示任何 codegendb: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/docsdocs 工作區執行 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": {},
  }
}

須知

  • 如果您的任務產生可快取的成品,請務必在 outputs 中包含 setup-dev
  • 如果您的任務不會產生可快取的成品,您可能需要設定 cachefalse,以確保它總是先執行。

使用環境變數

在開發期間,你經常需要使用環境變數。這些變數可讓你自訂程式行為,例如在開發和製作時指向不同的 DATABASE_URL

我們建議使用名為 dotenv-cli(在新分頁開啟) 的函式庫來解決這個問題。

我們希望每個開發人員都能在使用 Turbo 時獲得絕佳體驗。以下說明的方法符合這些標準。

我們正在針對這個問題制定一流的解決方案,但在等待期間,以下為次佳解決方案。

教學

  1. 在你的 根工作區 安裝 dotenv-cli
# Installs dotenv-cli in the root workspace
npm add dotenv-cli
  1. .env 檔案新增到你的根工作區
  ├── apps/
  ├── packages/
+ ├── .env
  ├── package.json
  └── turbo.json

新增任何你需要注入的環境變數

DATABASE_URL=my-database-url
  1. 在你的根 package.json 中,新增一個 dev 腳本。在前面加上 dotenv-- 參數分隔符號
{
  "scripts": {
    "dev": "dotenv -- turbo run dev"
  }
}

這會在執行 turbo run dev 之前,從 .env 中萃取環境變數。

  1. 現在,你可以執行你的開發腳本
npm run dev

環境變數也會填入!在 Node.js 中,這些變數可於 process.env.DATABASE_URL 中取得。

如果您使用環境變數來建置應用程式,您也應該將環境變數 新增到 turbo.json 中。