React Native
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.
Örnek çözümü göster
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.
Kendini test et
-
Monorepo'da paket adı nereden gelir?
package.json
- package.json name alanı
- app.json
- turbo.json
- tsconfig.json
Cevabı göster
package.json name alanı — Paket adı package.json'daki name alanından gelir.
-
Paylaşılan paket içe aktarımı
import { formatMetric } from '____';
Cevabı göster
import { formatMetric } from '@myorg/utils';
-
Klasörü rolüne eşle
- apps/mobile
- RN uygulaması
- packages/ui
- Paylaşılan bileşenler
- packages/utils
- Yardımcı işlevler
- turbo.json
- Build ayarları
Sıradaki ders: Birleştirme