~/zafer
Tüm yazılara dön
2 dk okuma

Turborepo'da `dev` Görevini Bitmeyen Bir Süreç Olarak İşaretlemek

// turbo.json
"tasks": {
  "dev": { "cache": false, "persistent": true },
  ...
}

Bu iki flag, Turborepo'nun dev görevine dair yapabileceği iki farklı yanlış varsayımı ayrı ayrı engelliyor.

cache: false — çıktı önbelleklenemez, çünkü çıktı yok

Turborepo, bir görevi çalıştırmadan önce girdi hash'ini kontrol edip "bu daha önce çalıştı, aynı sonucu ver" diyebiliyor — build/typecheck gibi sonlu görevlerde bu büyük bir kazanç. Ama dev bir dev server başlatıyor; "çıktısı" bir dosya değil, sürekli çalışan bir process. cache: false olmadan Turborepo, önceki bir dev çalıştırmasının loglarını "cache hit" diye tekrar oynatmaya çalışabilir — anlamsız, çünkü server zaten kapanmış.

persistent: true — görev bitmeyecek, bekleme

Turborepo varsayılan olarak bir görevin bir noktada exit code döneceğini varsayıyor ve bağımlı görevleri bunun bitmesini bekleyerek sıralıyor. dev hiç bitmiyor (Ctrl+C'ye kadar) — persistent: true olmadan Turborepo bu görevi "hâlâ çalışıyor, bir şeyler yanlış" diye değerlendirip zaman aşımına uğratabilir ya da paralel görev zincirleme mantığını bozabilir. Bu flag, "bu görevin bitmesini beklemek anlamsız, arka planda çalışsın" diyor.

build/typecheck neden bu flagleri hiç kullanmıyor

"build": { "dependsOn": ["^build"], "outputs": [".next/**", "!.next/cache/**", "dist/**"] },
"typecheck": { "dependsOn": ["^build"] }

Bu görevler sonlu: bir girdi kümesinden deterministik bir çıktı üretip exit oluyorlar — tam da Turborepo'nun cache/dependency-graph modelinin optimize ettiği şekil. dev bu modele hiç uymuyor, o yüzden iki flag'le modelden bilinçli olarak çıkarılıyor. turbo.json'da her görev, kendi doğasına (sonlu mu süreklilik mi) göre farklı davranış tanımlıyor — hepsine aynı varsayılanı uygulamak yanlış olurdu.

Turborepo'da `dev` Görevini Bitmeyen Bir Süreç Olarak İşaretlemek · Zafer Hüzmeli