Monorepo
- React Native kursu
- Uzman
- Ders 46/47
- 6 dk
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
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
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?
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ı
import { formatMetric } from '____';
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ı |