Kort svar
Vad är skillnaden mellan Expo och React Native?
React Native är ramverket som gör att en kodbas i TypeScript kan rendera riktiga native-komponenter. Expo är verktygskedjan runt omkring: byggen i molnet, uppdateringar utan butiksrelease, konfiguration av native-projekten och ett stort bibliotek av färdiga moduler.
Det är alltså inte antingen eller. Frågan är om du bygger React Native med Expos verktyg eller utan dem. Vi använder Expo i så gott som alla projekt.
Den gamla bilden av Expo stämmer inte längre
Fram till 2021 fanns en verklig begränsning: appar som kördes i Expo Go kunde bara använda de native-moduler Expo hade paketerat. Behövdes något annat fick projektet "ejectas", och då förlorade man verktygen. Den bilden lever kvar i mycket som skrivs på nätet.
Med development builds är begränsningen borta. Appen byggs med exakt de native-beroenden projektet behöver, inklusive egna moduler, och Expos verktyg fortsätter fungera. Expo Go används numera bara för snabba experiment.
Vad Expo faktiskt ger
| Del | Vad den gör | Varför det spelar roll |
|---|---|---|
| EAS Build | Bygger iOS- och Android-appar i molnet | Ingen Mac behövs för att göra en iOS-build, och bygget ser likadant ut för alla i teamet |
| EAS Submit | Skickar bygget till App Store och Google Play | Signering och uppladdning som ett kommando i stället för manuellt pyssel |
| EAS Update | Skickar JavaScript-ändringar direkt till installerade appar | En rättning kan nå användarna samma dag utan ny granskning |
| Config plugins | Konfigurerar native-projekten från en fil | Native-inställningar hamnar i versionshanteringen i stället för i någons lokala Xcode |
| Expo-modulerna | Kamera, notiser, filsystem, haptik, säkert lagringsutrymme | Väl underhållna moduler i stället för en samling halvdöda paket |
OTA-uppdateringar — vad som är tillåtet
EAS Update skickar ny JavaScript-kod till redan installerade appar. Både Apple och Google tillåter det så länge appens karaktär och funktion inte ändras i grunden; det är samma regel som gäller för allt kodinnehåll som laddas efter installation. Vad som däremot alltid kräver en ny butiksversion:
- Ny eller uppdaterad native-kod, till exempel ett nytt bibliotek som pratar med hårdvaran.
- Nya behörigheter, som kamera eller plats.
- Ändrade butiksmetadata: ikon, namn, skärmbilder.
I praktiken används OTA mest till det den är bäst på: rätta ett fel snabbt, justera en text, skruva på ett flöde. Större releaser går ändå genom butiken.
När vi väljer bort Expo
Ett native-SDK som inte går att konfigurera från en plugin
Vissa slutna SDK:er — enstaka betalterminaler, äldre integrationer inom vård och bank — kräver manuella ingrepp i Xcode-projektet. Går det inte att uttrycka som en config plugin kan bare workflow vara enklare.
Extremt hårda krav på byggmiljön
Organisationer som inte får bygga i extern molntjänst kör EAS lokalt eller på egen infrastruktur. Det fungerar, men kräver mer uppsättning.
I övrigt är valet enkelt. Skillnaden i tid för att sätta upp ett projekt är dagar, inte timmar, och de dagarna återkommer vid varje release under appens livstid. Så här ser vårt arbetssätt ut i praktiken: React Native- och Expo-utveckling.
Kostnad
Expo har en gratisnivå som räcker för ett projekt med få byggen i månaden. Team som bygger ofta landar oftast på ett abonnemang runt 99 USD i månaden. Det motsvarar mindre än en arbetstimme och sparar betydligt mer än så i byggkö och signeringsstrul.
Frågar en utvecklare "Expo eller React Native?" som om det vore två ramverk — be om ett förtydligande. Det är samma ramverk. Skillnaden ligger i verktygen runt omkring, och de påverkar releasetakten mer än de påverkar appen.
Vad du får med dig
- Expo är verktygskedjan runt React Native, inte ett konkurrerande ramverk.
- Development builds tar bort den gamla begränsningen kring native-moduler.
- OTA-uppdateringar är tillåtna för JavaScript-ändringar, inte för native-kod eller nya behörigheter.
- Bare workflow är motiverat främst vid slutna SDK:er eller hårda krav på byggmiljön.