CodeBlanks Logo Icon CodeBlanks

Monorepo

Monorepo yapısı ve paylaşılan paketler kurarsın.

Monorepo nedir?

Monorepo, birden çok paketin tek bir dizin deposunda tutulmasıdır. Uygulama ve paylaşılan paketler aynı repo'da yaşar. Bu, kod paylaşmayı ve sürüm uyumunu kolaylaştırır. React Native monorepo'lar için Turborepo ya da Yarn workspaces yaygındır.

Örnek yapı: apps/mobile (RN uygulaması), packages/ui (paylaşılan bileşenler), packages/utils (yardımcı işlevler). Uygulama import { Button } from '@myorg/ui' ile paylaşılan paketi kullanır. Paket adı package.json'daki name alanından gelir. Bu yapı, büyük ekiplerde tutarlılığı korur; her paket ayrı bir npm paketi gibi davranır ama hepsi aynı repo'dadır.

Uygulama Paylaşılan paketi içe aktar

Önceki kodun üstüne @myorg/utils paketinden formatMetric işlevini içe aktar. Dosyanın en üstüne import { formatMetric } from '@myorg/utils'; satırını ekle.

Başlangıç kodu

App.js
import React, { useState } from 'react';
import { Text, View } from 'react-native';

function App() {
  const [metrics, setMetrics] = useState({});
  return (
    <View>
      <Text>İzleme Paneli</Text>
    </View>
  );
}

const MetricCard = memo(function MetricCard({ label, value }) {
  return <Text>{label}: {value}</Text>;
});

function App() {
  const [metrics, setMetrics] = useState({});
  const metricKeys = useMemo(() => Object.keys(metrics), [metrics]);
  return (
    <View>
      <Text>İzleme Paneli</Text>
    </View>
  );
}

// paylaşılan paketten yardımcı işlevi içe aktar

Örnek çözüm

App.js
import { formatMetric } from '@myorg/utils';
import React, { useState } from 'react';
import { Text, View } from 'react-native';

function App() {
  const [metrics, setMetrics] = useState({});
  return (
    <View>
      <Text>İzleme Paneli</Text>
    </View>
  );
}

const MetricCard = memo(function MetricCard({ label, value }) {
  return <Text>{label}: {value}</Text>;
});

function App() {
  const [metrics, setMetrics] = useState({});
  const metricKeys = useMemo(() => Object.keys(metrics), [metrics]);
  return (
    <View>
      <Text>İzleme Paneli</Text>
    </View>
  );
}

Turborepo ve workspaces

Turborepo, monorepo'larda build ve test süreçlerini hızlandıran bir araçtır. Paralel build, önbellek ve akıllı bağımlılık sıralaması sunar. Yarn workspaces ise paketler arası bağlantıyı yönetir.

Örnek turbo.json: { "pipeline": { "build": { "dependsOn": ["^build"] }, "test": {} } }. Burada build önce bağımlı paketlerin build'ini çalıştırır. test her pakette bağımsız çalışır. Turborepo, değişmeyen paketlerin build'ini atlar; bu yüzden CI süresi kısalır. Bu araç, uzman seviye monorepo yönetiminin temelidir.

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Monorepo'da paket adı nereden gelir?

App.js
package.json
  • package.json name alanı Doğru cevap
  • app.json
  • turbo.json
  • tsconfig.json

Açıklama: Paket adı package.json'daki name alanından gelir.

2 Paylaşılan paket içe aktarımı

Soru
import { formatMetric } from '____';
Cevap
import { formatMetric } from '@myorg/utils';

Açıklama: @myorg/utils monorepo paket adıdır.

3 Klasörü rolüne eşle

Kavram Anlamı
apps/mobile RN uygulaması
packages/ui Paylaşılan bileşenler
packages/utils Yardımcı işlevler
turbo.json Build ayarları

Uzman bölümündeki tüm dersler