Spotkanie współtwórców rdzenia React Native 2022
Ta strona została przetłumaczona przez PageTurner AI (beta). Nie jest oficjalnie zatwierdzona przez projekt. Znalazłeś błąd? Zgłoś problem →
Po latach pandemii i wydarzeń tylko online, naprawdę poczuliśmy, że nadszedł czas, by połączyć współtwórców rdzenia React Native!
Dlatego na początku września zebraliśmy aktywnych współtwórców rdzenia React Native, opiekunów bibliotek oraz zespoły Meta ds. React Native i Metro na Spotkaniu współtwórców rdzenia 2022. Callstack gościł wydarzenie w swojej siedzibie we Wrocławiu, w ramach konferencji React Native EU odbywającej się w tym samym czasie.
Wspólnie z zespołem rdzenia React Native przygotowaliśmy serię warsztatów, w których mogli uczestniczyć obecni. Tematy obejmowały:
-
Generowanie kodu w React Native i wsparcie TypeScript
-
Migracja bibliotek do Nowej Architektury React Native
-
Monorepo w React Native
-
Metro Web i dostosowanie ekosystemu
-
Uproszczony proces wydań Metro
Byliśmy pod wrażeniem poziomu wymiany wiedzy i współpracy podczas tych dwóch dni. W tym wpisie blogowym chcemy dać wam przedsmak efektów tego spotkania.
Generowanie kodu w React Native i wsparcie TypeScript
Generowanie kodu w React Native to fundamentalna część Nowej Architektury. Wspieranie i ulepszanie go należy do naszych najwyższych priorytetów dla przyszłości React Native. Na przykład wcześniej w tym roku dodaliśmy obsługę generycznego kodu rozpoczynając od specyfikacji TypeScript zamiast Flow.
W tej sesji wykorzystaliśmy okazję, by wprowadzić nowych współtwórców do generowania kodu, wyjaśniając jego podstawowe koncepcje i działanie. Następnie skupiliśmy się na dwóch głównych obszarach:
1. Obsługa nowych typów obecnie nieobsługiwanych przez generowanie kodu. Jednym z najbardziej wyczekiwanych były typy unii łańcuchowych w TypeScript.
Niewielki zespół przeniósł się do sali konferencyjnej, by podjąć to zadanie. Po drodze napotkali i pokonali trudności, takie jak uruchamianie testów jednostkowych dla generowania kodu. Spędzili sporo czasu na zrozumieniu przepływu wykonania kodu, zanim zaczęli pracować z kodem. Po kilku godzinach wspólnej pracy uzyskali pierwszy prototyp rozpoznający unie łańcuchowe. To doświadczenie było niezwykle przydatne w dyskusjach o wzorcach projektowych i idealnej architekturze na przyszłość.
2. Ulepszenie automatycznego linkowania dla iOS, gdzie brakowało obsługi pewnego przypadku użycia.
Konkretnie, automatyczne linkowanie nie działało poprawnie w scenariuszach, gdy biblioteki i aplikacja współistniały w jednym monorepo. Android już obsługiwał ten przypadek, ale iOS nie.
Praca z współtwórcami nad generowaniem kodu uświadomiła nam, że praca w jego bazie kodu nie jest trywialna. Na przykład dodanie obsługi jednego typu wymagało kopiowania i wklejania tego samego kodu w czterech miejscach: modułach ze specyfikacjami Flow, modułach ze specyfikacjami TypeScript, komponentach ze specyfikacjami Flow i komponentach ze specyfikacjami TypeScript.
Ta refleksja skłoniła nas do utworzenia zadania parasolowego, by zwrócić się do społeczności o pomoc w ulepszeniu kodu bazowego w kierunku większej utrzymywalności.
Zaangażowanie było wyjątkowe: w ciągu 5 dni szybko przydzieliliśmy pierwsze 40 zadań. Pod koniec października społeczność ukończyła 47 zadań, a wiele innych jest gotowych i czeka na scalenie.
Ta inicjatywa przyczyniła się również do Hacktoberfest dla wszystkich osób, które wniosły wkład w te ulepszenia!
Migracja bibliotek do nowej architektury React Native
Gorącym tematem w środowisku React Native jest Nowa Architektura. Posiadanie bibliotek wspierających Nową Architekturę jest kluczowe dla migracji całego ekosystemu. Dlatego chcemy wspierać maintainerów bibliotek w migracji do Nowej Architektury.
Sesja rozpoczęła się od burzy mózgów, gdzie współtwórcy rdzenia mogli zadawać zespołowi React Native wszystkie pytania dotyczące Nowej Architektury. Ta bezpośrednia wymiana była kluczowa zarówno dla wyjaśnienia wątpliwości współtwórców, jak i zebrania informacji zwrotnej przez zespół RN. Część zgłoszonych uwag zostanie zaimplementowana w React Native 0.71.
Następnie przeszliśmy do praktycznej migracji jak największej liczby bibliotek. W trakcie sesji rozpoczęliśmy proces migracji dla pakietów społecznościowych takich jak react-native-document-picker, react-native-store-review i react-native-orientation.
Przypominamy: jeśli migrujesz bibliotekę i potrzebujesz wsparcia, skontaktuj się z naszą grupą roboczą Nowej Architektury na GitHubie.
Monorepo React Native
Wydanie nowej wersji React Native nie jest dziś trywialne. Jako jeden z najczęściej pobieranych pakietów na NPM, chcemy zapewnić płynny proces wydawniczy.
Dlatego planujemy refaktoryzację repozytorium react-native i implementację RFC Monorepo (#480).
Sesję rozpoczęliśmy od zebrania opinii współtwórców, ponieważ kluczowe jest ewoluowanie naszego repozytorium przy minimalizacji problemów dla zależności.
Pracowaliśmy nad dwoma obszarami: rozbudową infrastruktury CI o obsługę monorepo poprzez dodanie Verdaccio oraz zmianą nazw i zakresów pakietów, co zaowocowało 6 kontrybucjami.
Postępy możecie śledzić w tym zbiorczym zgłoszeniu – wkrótce podzielimy się większą ilością informacji.
Metro Web i dostosowanie ekosystemu
Metro, nasz bundler JavaScript, jest integralną częścią środowiska React Native i chcemy zapewnić jego zgodność z najnowszymi standardami ekosystemu JS.
Sesja skupiła się na usprawnieniu Metro dla przypadków użycia na Webie i integracji z ekosystemem npm/bundlerów. Kluczowe obszary:
1. Wdrożenie specyfikacji "exports" (punkty wejścia pakietów)
"exports" oferuje nowoczesną alternatywę dla "main", pozwalając definiować wiele punktów wejścia, warunkowe rozwiązywanie zależności oraz blokując wszelkie inne punkty wejścia poza tymi zdefiniowanymi w "exports". Ta hermetyzacja pozwala autorom pakietów na precyzyjne definiowanie interfejsu publicznego.
Wdrożenie "exports" ma ogromny potencjał. Dyskutowaliśmy o obsłudze kodu specyficznego dla platformy z "exports". Opracowaliśmy plan wdrożenia "exports" bez powodowania problemów, dodając w resolverze Metro tryby "strict" i "non-strict". Omówiliśmy też, jak builder-bob ułatwi adoptację trybu ścisłego.
Efektem dyskusji są:
-
RFC dla Metro dotyczący działania eksportów pakietów w React Native.
-
RFC dla Node.js o uwzględnieniu „react-native” jako Warunku Społecznościowego (Community Condition).
2. Ekosystem webowy i narzędzi do bundlowania
Zespół Metro podzielił się postępami współpracy z Expo oraz zamiarem kontynuacji tego modelu pracy przy nadchodzącym wsparciu dla dzielenia pakietów (bundle splitting) i tree-shaking. Ponownie poruszyliśmy temat wsparcia dla modułów ES i rozważaliśmy potencjalne przyszłe funkcje jak Yarn PnP czy optymalizacja wyników w środowisku webowym. Omówiliśmy, jak rdzeń Metro współdzieli logikę i struktury danych z Jest oraz możliwości dalszej współpracy.
Programiści przedstawili wnikliwe przypadki użycia dla dzielenia pakietów i interoperacyjności z narzędziami stron trzecich. Doprowadziło to do dyskusji o potencjalnych punktach rozszerzeń w Metro oraz ulepszeniu aktualnej dokumentacji.
Dyskusja ta stanowiła solidne przygotowanie do następnej sesji dnia o uproszczeniu procesu wydawniczego.
Uproszczony proces wydawniczy Metro
Jak wspomniano, wydawanie nowych wersji React Native nie jest prostym zadaniem.
Komplikuje się to, gdyż musimy wydawać React Native, React Native CLI oraz Metro. Narzędzia te są wzajemnie powiązane, ponieważ zarówno React Native, jak i CLI zależą od Metro. Tworzy to pewne tarcie przy wydawaniu nowych wersji któregokolwiek z pakietów.
Obecnie zarządzamy tym poprzez bezpośrednią komunikację i zsynchronizowane wydania, ale istnieje przestrzeń na ulepszenia.
W tej sesji ponownie przeanalizowaliśmy zależności między React Native, Metro i CLI. Odkryliśmy, jak niektóre decyzje projektowe podjęte podczas inicjatywy „Lean Core”, gdy wydzielano CLI z React Native, spowodowały współzależność projektów i powielanie funkcjonalności. Decyzje te miały wówczas sens i pozwoliły zespołowi CLI na szybsze iteracje niż kiedykolwiek.
Przyszedł czas, by je zweryfikować i wykorzystać doświadczenia obu zespołów do znalezienia rozwiązania. W efekcie zespół Metro przejmie rozwój @react-native-community/cli-plugin-metro, tymczasowo przenosząc go z powrotem do rdzenia React Native, a następnie prawdopodobnie do monorepo Metro.

Najcenniejszym efektem, poza trzema godzinami rysowania zależności między pakietami na tablicy, była wymiana problemów, doświadczeń i planów między zespołami CLI i Metro, co zaowocowało lepszym wzajemnym zrozumieniem.
Nie bylibyśmy w stanie osiągnąć tego poziomu współpracy bez bezpośredniego spotkania.
Nadal jesteśmy pod wrażeniem, jak kilka godzin spędzonych wspólnie przez dwa dni zaowocowało tak intensywną wymianą wiedzy i krzyżowaniem się pomysłów. Podczas tego szczytu zasialiśmy ziarna inicjatyw, które pomogą nam ulepszać i przekształcać ekosystem React Native.
Chcemy ponownie podziękować Callstack za gościnę oraz wszystkim uczestnikom za udział w Core Contributor Summit 2022.
Jeśli chcesz dołączyć do rozwoju React Native, dołącz do naszych otwartych inicjatyw i zapoznaj się z przewodnikiem dla współtwórców na naszej stronie. Mamy nadzieję spotkać się z Tobą osobiście w przyszłości!

