Turborepo Monorepo Kılavuzu: Çoklu Uygulama Projelerini Yönetme

Çoklu uygulama monorepolarını yönetmek için Turborepo'da ustalaşın. Büyük ölçekli projeler için çalışma alanı yapılandırmasını, görev işlem hatlarını, önbelleğe almayı, paylaşılan paketleri ve CI/CD optimizasyonunu öğrenin.

E

ECOSIRE Research and Development Team

ECOSIRE Ekibi

5 Mart 20264 dk okuma915 Kelime

Turborepo Monorepo Kılavuzu: Çoklu Uygulama Projelerini Yönetme

Birden fazla uygulama ve paylaşılan paket içeren Monorepo'lar artık birbirine bağlı yazılım ürünleri geliştiren şirketler için standart mimaridir. Vercel tarafından satın alınan Turborepo, monorepo'ları pratik hale getiren yapı düzenleme katmanını sağlar; görev bağımlılıklarını, önbelleğe almayı ve düzinelerce pakette paralel yürütmeyi yönetir.

Önemli Çıkarımlar

  • Turborepo uzaktan önbelleğe alma, artımlı değişikliklerde CI oluşturma sürelerini %80-90 oranında azaltabilir
  • Görev hatları, paketlerin otomatik olarak doğru bağımlılık sırasına göre oluşturulmasını sağlar
  • Paylaşılan paketler (türler, doğrulayıcılar, yardımcı programlar), uygulamalar arasında kod tekrarını ortadan kaldırır
  • pnpm çalışma alanları monorepos için disk açısından verimli bağımlılık yönetimi sağlar

Monorepo Mimarisi

Dizin Yapısı

Tipik bir Turborepo monorepo, uygulamaları paylaşılan paketlerden ayırır:

my-monorepo/
  apps/
    api/           # NestJS backend
    web/           # Next.js frontend
    docs/          # Documentation site
    mobile/        # React Native app
  packages/
    db/            # Drizzle ORM schemas and migrations
    types/         # Shared TypeScript types
    validators/    # Zod validation schemas
    utils/         # Shared utility functions
    ui/            # Shared UI components
    config/        # Shared configuration (ESLint, TypeScript)
  turbo.json       # Turborepo configuration
  pnpm-workspace.yaml
  package.json     # Root package.json

Çalışma Alanı Yapılandırması

pnpm-workspace.yaml'da çalışma alanlarını tanımlayın:

packages:
  - "apps/*"
  - "packages/*"

Her çalışma alanının bağımlılıkları ve komut dosyalarını içeren kendi package.json'u vardır. Paylaşılan paketlere çalışma alanı protokolü kullanılarak başvurulur:

{
  "dependencies": {
    "@myorg/types": "workspace:*",
    "@myorg/validators": "workspace:*",
    "@myorg/utils": "workspace:*"
  }
}

Turborepo Yapılandırması

Görev İşlem Hattı

turbo.json, görevlerin birbirleriyle nasıl ilişkili olduğunu tanımlar:

{
  "tasks": {
    "build": {
      "dependsOn": ["^build"],
      "outputs": ["dist/**", ".next/**"]
    },
    "dev": {
      "dependsOn": ["^build"],
      "cache": false,
      "persistent": true
    },
    "lint": {
      "dependsOn": ["^build"]
    },
    "test": {
      "dependsOn": ["build"]
    }
  }
}

Anahtar kavramlar:

  • dependsOn: ["^build"]: Düzeltme işareti (^), "önce tüm bağımlılıkları oluştur" anlamına gelir. Turborepo, web uygulamasını oluştururken öncelikle paketler/türler, paketler/doğrulayıcılar ve paketler/kullanıcılar oluşturur.
  • çıkışlar: Turborepo'nun önbelleğe aldığı dosyalar. Sonraki çalıştırmalarda, girişler değişmediyse Turborepo, yeniden oluşturmak yerine önbelleğe alınan çıkışı yeniden oynatır.
  • kalıcı: doğru: Çalışmaya devam eden geliştirme sunucuları için.
  • cache: false: Her zaman çalışması gereken görevler (geliştirme sunucuları gibi) için önbelleğe almayı devre dışı bırakın.

Paylaşılan Paketler

Paket Çeşitleri

Uygulamalarda kullanılan TypeScript türlerini merkezileştirin:

// packages/types/src/user.ts
export interface User {
  id: string;
  email: string;
  name: string;
  role: "admin" | "user" | "support";
  createdAt: Date;
}

export type CreateUserDTO = Omit<User, "id" | "createdAt">;
export type UpdateUserDTO = Partial<CreateUserDTO>;

Doğrulayıcılar Paketi

Ön uç ve arka uç arasında paylaşılan Zod şemaları:

// packages/validators/src/user.ts
import { z } from "zod";

export const createUserSchema = z.object({
  email: z.string().email(),
  name: z.string().min(2).max(255),
  role: z.enum(["admin", "user", "support"]),
});

Yapı Yapılandırması

Paylaşılan paketlerin, uygulamaların bunları kullanabilmesi için önceden oluşturulmuş olması gerekir. Her paketi TypeScript'i JavaScript'e derleyen bir derleme komut dosyasıyla yapılandırın:

{
  "scripts": {
    "build": "tsc --project tsconfig.json",
    "dev": "tsc --watch"
  }
}

Önbelleğe Alma Stratejisi

Yerel Önbelleğe Alma

Turborepo, görev çıktılarını varsayılan olarak node_modules/.cache/turbo konumunda önbelleğe alır. Turbo build'i çalıştırdığınızda ve hiçbir şey değişmediğinde, Turborepo önbelleğe alınan çıktıyı milisaniyeler içinde yeniden oynatır.

Uzaktan Önbelleğe Alma

CI/CD için derleme yapıtlarını ekip üyeleri ve CI çalıştırmaları arasında paylaşmak üzere uzaktan önbelleğe almayı etkinleştirin:

npx turbo login
npx turbo link

Remote caching means a build completed on one developer machine or CI run is available to everyone. Etki çarpıcı: Artımlı CI oluşturma süresi 10 dakikadan 1 dakikanın altına düştü.


Geliştirme İş Akışı

Tüm Uygulamaları Çalıştırma

pnpm dev       # Starts all apps and watches all packages

Turborepo önce paylaşılan paketler oluşturur (çünkü dev, ^buildOn'a bağlıdır), ardından uygulama geliştirme sunucularını paralel olarak başlatır. Paylaşılan paketlerde yapılan değişiklikler, tüketen uygulamalara yayılan yeniden oluşturmaları tetikler.

Belirli Uygulamaları Çalıştırma

pnpm dev --filter=web     # Only the web app and its dependencies
pnpm dev --filter=api     # Only the API and its dependencies

Her şeyi başlatmanın gereksiz olduğu büyük monorepolar için filtreleme önemlidir.


CI/CD Optimizasyonu

Etkilenen Paket Tespiti

Turborepo, son işlemeden bu yana hangi paketlerin değiştiğini belirler ve yalnızca etkilenen paketler için görevleri çalıştırır:

turbo build --filter=...[HEAD^1]

Bu, yalnızca en son taahhütte değişen paketler ve bunların bağımlıları için derlemeyi çalıştırır.

Paralel Yürütme

Turborepo bağımsız görevleri paralel olarak yürütür. Paketler/türler ve paketler/yardımcı programların bağımlılık ilişkisi yoksa eş zamanlı olarak oluşturulurlar. Eşzamanlılık düzeyi mevcut CPU çekirdeklerine uyum sağlar.


Sıkça Sorulan Sorular

S: Bir Turborepo monorepo kaç paketi işleyebilir?

Turborepo, monorepoları yüzlerce paketle yönetiyor. Görev grafiği başlangıçta analiz edildiğinden performans iyi ölçeklenir ve önbelleğe alma, çoğu paketin artımlı değişikliklere dayalı derlemeleri atlaması anlamına gelir.

S: Çalışma alanları için pnpm mi yoksa npm mi kullanmalıyız?

Monorepos için pnpm şiddetle tavsiye edilir. İçerik adreslenebilir deposu, paketler arasındaki bağımlılıkları tekilleştirerek önemli miktarda disk alanı ve kurulum süresi tasarrufu sağlar. pnpm çalışma alanları ayrıca bağımlılık çözümü konusunda daha katıdır ve eksik bağımlılık bildirimlerini yakalar.

S: Uygulamalardaki farklı Node.js sürümlerini nasıl ele alacağız?

Node.js sürüm gereksinimlerini belirtmek için her package.json dosyasındaki motorlar alanını kullanın. Çalışma zamanı farklılıkları için CI'yı uygulama başına uygun sürümü kullanacak şekilde yapılandırın.

S: Turborepo'yu aşamalı olarak benimseyebilir miyiz?

Evet. Mevcut bir pnpm çalışma alanı projesine turbo.json ekleyin ve görev işlem hatlarını yapılandırın. Mevcut scriptler çalışmaya devam ediyor. You gain caching and task orchestration immediately without restructuring.


Sırada Ne Var

Turborepo, monorepo gelişimini bir bakım yükünden verimlilik çarpanına dönüştürüyor. Basit bir yapıyla başlayın ve projenizin gerektirdiği şekilde büyüyün.

Monorepo mimarisi danışmanlığı için ECOSIRE ile iletişime geçin veya çoklu uygulama ERP mimarileri için Odoo entegrasyon hizmetlerimizi keşfedin.


ECOSIRE tarafından yayınlandı - işletmelerin kurumsal yazılım çözümleriyle ölçeklenmesine yardımcı oluyor.

E

Yazan

ECOSIRE Research and Development Team

ECOSIRE'da kurumsal düzeyde dijital ürünler geliştiriyor. Odoo entegrasyonları, e-ticaret otomasyonu ve yapay zeka destekli iş çözümleri hakkında içgörüler paylaşıyor.

WhatsApp'ta Sohbet Et