Wat is het verschil tussen Expo en React Native?

Van de Expo-website

Expo stelt webontwikkelaars in staat om echt native apps te bouwen die op zowel iOS als Android werken door ze één keer in JavaScript te schrijven.

Is dit niet wat React Native doet? Wat is het verschil?


Antwoord 1, autoriteit 100%

Als je code schrijft in Expo, schrijf je React Native-code. Expo heeft
twee hoofdstukken:

  1. Expo CLI (expo-cli): een ontwikkelaarstool voor het maken van projecten, het bekijken van logboeken, openen op uw apparaat, publiceren, enz.

  2. Expo-client: een app op je telefoon waarmee je je projecten kunt openen
    terwijl u eraan werkt, zonder dat u door XCode of Android Studio hoeft te gaan, en laat ook andere mensen ze bekijken! En als je het publiceert via expo-cli, hebben mensen er op elk moment toegang toe via de Expo-client op Android of op iOS als ze zijn ingelogd op hetzelfde account waarmee het is gepubliceerd. Ten slotte maken we het ook mogelijk om stand-alone apps te bouwen, zodat mensen de Expo-client niet hoeven te gebruiken om deze te openen, en je kunt distribueren naar de app store en play store als je wilt.

Dus Expo is een set tools die bovenop React Native is gebouwd. Deze tools zijn afhankelijk van één belangrijke overtuiging die op Expo wordt gehouden: het is mogelijk om de meeste apps te bouwen zonder ooit native code te hoeven schrijven, op voorwaarde dat je een uitgebreide set API’s hebt die zijn blootgesteld aan JavaScript.

Dit is belangrijk omdat je met React Native altijd kunt terugvallen op native code. Dit is soms ongelooflijk handig, maar er zijn kosten aan verbonden: je moet mensen je binaire bestanden sturen als je wilt dat ze ze testen, iemand aan de andere kant van de wereld kan niet zomaar op een link tikken om deze te openen terwijl je aan het werk bent erop en u kunt het niet met één klik publiceren zodat iemand het kan openen, net zoals u dat in een browser zou doen.

Bij Expo raden we je aan om te voorkomen dat je terugvalt op native code, als dat mogelijk is. Zoals ik hierboven al zei, denken we dat met een uitgebreide set API’s die beschikbaar zijn voor JavaScript, dit voor de meeste apps niet nodig zou moeten zijn. We streven er dus naar om deze uitgebreide set API’s te bieden en vervolgens alle geweldige tools te bouwen die kunnen bestaan ​​in een wereld waar de native runtime wordt gedeeld.

Als je echter moet ontdekken dat je terug wilt naar native, kun je eject gebruiken en doorgaan met het gebruiken van de native API’s die Expo je geeft, terwijl je hetzelfde controleniveau hebt als bij elk native project.

Lees meer over uitwerpen


Antwoord 2, autoriteit 53%

Een samenvatting van de documentatie en antwoorden van Expo-medewerkers:

Native init reageren:

Voordelen

  • Je kunt native modules toevoegen die zijn geschreven in Java/Objective-C (waarschijnlijk de enige, maar de sterkste)

Nadelen

  • Android Studio en XCode nodig om de projecten uit te voeren
  • Je kunt niet voor iOS ontwikkelen zonder een mac
  • Het apparaat moet via USB zijn aangesloten om het te gebruiken voor testen
  • Lettertypen moeten handmatig worden geïmporteerd in XCode
  • Als je de app wilt delen, moet je het hele .apk/ .ipa-bestand
  • verzenden

  • Biedt standaard geen JS API’s, b.v. Push-meldingen, Asset Manager, ze moeten handmatig worden geïnstalleerd en bijvoorbeeld worden gekoppeld aan npm
  • Het correct opzetten van een werkend project (inclusief apparaatconfiguratie) is nogal ingewikkeld en kan tijd kosten

Expo

Voordelen

  • Het opzetten van een project is eenvoudig en kan binnen enkele minuten worden gedaan
  • U (en andere mensen) kunnen het project openen terwijl u eraan werkt
  • Het delen van de app is eenvoudig (via QR-code of link), je hoeft niet het hele .apkof .ipabestand
  • te sturen

  • Geen build nodig om de app uit te voeren
  • Integreert enkele basisbibliotheken in een standaardproject (Push Notifications, Asset Manager, etc.)
  • Je kunt het naar ExpoKit verwijderen en native code integreren door enkele van de Expo-functies te blijven gebruiken, maar niet allemaal
  • Expo kan .apken .ipabestanden bouwen (distributie naar winkels mogelijk met Expo)

Nadelen

  • Je kunt geen native modules toevoegen (waarschijnlijk een gamechanger voor sommigen)
  • Je kunt geen bibliotheken gebruiken die native code gebruiken in Objective-C/Java
  • De standaard Hello World-app is ongeveer 25 MB groot (vanwege de geïntegreerde bibliotheken)
  • Als je FaceDetector, ARKit of Payments wilt gebruiken, moet je het naar ExpoKit verwijderen
  • Het uitwerpen naar ExpoKit heeft een compromis van eigenschappen van Expo, b.v. je kunt niet delen via QR-code
  • Bij het uitwerpen naar ExpoKit bent u beperkt tot de reactie-native versie die wordt ondersteund door ExpoKit dan
  • Debuggen in ExpoKit (met native modules) is een stuk ingewikkelder, omdat het twee talen en verschillende bibliotheken combineert (geen officiële Expo-ondersteuning meer)

Bronnen:


Antwoord 3, autoriteit 19%

Het antwoord van Brent Vatne is prima, maar ik wil graag wat details toevoegen.


Expo breidt het API-oppervlak van React Native uit

React Native geeft je niet alle JS API’s die je uit de doos nodig hebt, maar alleen de meeste primitieve functies. Van React Native-ontwikkelaars wordt verwacht dat ze Android Studio/XCode gebruiken om extra native bibliotheken te koppelen. Expo heeft tot doel RN te verbeteren en alle JS API te bieden die u nodig hebt voor de meest voorkomende behoeften. Het is in feite een set van goed gedefinieerde native bibliotheken die al voor u zijn verpakt in een enkele lib: ExpoKit. Soms bestaan ​​deze bibliotheken al in de RN-wereld en zijn ze geïntegreerd in ExpoKit.

Het is ook belangrijk op te merken dat het Expo-team niet elke beschikbare bibliotheek in ExpoKit kan opnemen (wat voor enige frustratie kan zorgen) omdat de app-grootte van de hello world zou groeien, omdat het veel API’s zou verzenden die dat wel zouden doen’ kan niet in de meeste apps worden gebruikt.

Expo biedt over-the-air JS-updates

Net als andere systemen (CodePush…), biedt Expo een systeem om uw app draadloos bij te werken. Dit betekent dat je je JS-bundel op een CDN uploadt en de mobiele apps de nieuwe JS automatisch downloaden en gebruiken bij de volgende keer opstarten (zonder dat je een publicatie/recensie van de winkels hoeft aan te vragen).

Expo biedt een CLI-tool om de JS-bundels op hun CDN te uploaden/beheren. Voor ontwikkeling kun je er ook voor kiezen om de CDN te worden en de JS-bundel op localhost te hosten. En XDE is slechts een visuele wrapper op de CLI.

Expo biedt een generieke klant

De Expo-client is een generieke client waarmee elke app kan worden geladen die compatibel is met Expo. Alle Expo-apps delen exact dezelfde native runtime (RN + ExpoKit), het enige verschil is de JS die we ze geven. In de Expo-apps die u naar de app-stores publiceert, is uw JS-bundel-url hardcoded. De Expo-client is op een specifieke manier gebouwd, zodat u kunt kiezen uit welke url de JS moet worden geladen, door een QRCode te scannen of een url op te geven.

Houd er rekening mee dat deze client ook JS-bundels van localhost kan laden en uw ontwikkelervaring eenvoudiger maakt: XCode of Android Studio is niet nodig en het wordt veel sneller om uw eerste Hello World aan de telefoon te krijgen (van uren tot minuten ). Je kunt zelfs ontwikkelen op een iPhone zonder Mac en de installatie duurt 2 minuten.

Omdat de Expo SDK kan worden geüpgraded, bevat de Expo-client een compatibiliteitslaag zodat de laatste 5 SDK-versies kunnen worden uitgevoerd.

Expo biedt een bouwservice

Omdat alle Expo-apps dezelfde native code delen, kan Expo deze apps eenvoudig voor u bouwen. Ze hebben een cloud build-service gemaakt.

Het belangrijkste dat twee door Expo gebouwde apps onderscheidt, is alleen de hardcoded url waarnaar de app de JS-bundel moet downloaden om te kunnen draaien.

Expo doet nog wat andere dingen voor je, zoals een declaratieve manier bieden om app-pictogrammen, oriëntaties, machtigingen, api-sleutels in te stellen, je te helpen pushmeldingen in te stellen, profielen in te richten… veel instellingen moeten hardgecodeerd worden tijdens het bouwen in de app en kan niet via de ether worden gewijzigd.

Expo is om Native te reageren wat Phonegap is voor Cordova

React Native is vergelijkbaar met Cordova. Het is niet dezelfde weergavetechnologie (native vs webview), maar beide stellen je in staat om native features vanuit javascript te bedienen, en beide bieden een plug-insysteem zodat ontwikkelaars gemakkelijk nieuwe JS/native bindingen kunnen toevoegen.

PhoneGap lijkt op Expo. Ze proberen allebei de onbewerkte API van het onderliggende platform waarop ze zijn gebouwd te verrijken met een vooraf gedefinieerde set aanvullende native plug-ins. PhoneGap biedt ook een build-serviceen heeft een algemene clientdie werken zolang u de goedgekeurde plug-ins gebruikt.

Conclusie

Zoals je kunt zien, is Expo een set tools. Aan het einde kunt u eenvoudig uw mobiele projecten ontwikkelen, delen en publiceren in de winkels. Het lijkt veel op de PhoneGap-ervaring (maar een stuk beter en minder verwarrend).

Ik zal Expo definitief aanbevelen voor elk nieuw React Native greenfield-project, behalve in deze 2 gevallen:

  • Je weet al dat je API’s nodig hebt die niet beschikbaar zijn in Expo en ook niet snel zullen zijn
  • U geeft veel om de grootte van uw app (HelloWorld is > 25 MB vanwege de grote omvang van ExpoKit, maar daarna neemt het niet veel toe omdat het gewoon JS is)

Antwoord 4, autoriteit 11%

Het wordt uitgelegd in de officiële Expo-documentatie

Wat is de verschil tussen Expo en React Native?

Expo is een beetje zoals Rails voor React Native. Veel dingen zijn voor u ingesteld, dus u kunt sneller aan de slag en op de goede weg.

Met Expo heeft u geen Xcode of Android Studio nodig. Je schrijft gewoon JavaScript met de teksteditor waar je je prettig bij voelt (Atom, vim, emacs, Sublime, VS Code, wat je maar wilt). U kunt XDE (onze desktopsoftware) uitvoeren op Mac, Windows en Linux.

Hier zijn enkele dingen die Expo u direct geeft en die meteen werken:

Ondersteuning voor iOS en Android

Je kunt apps die in Expo zijn geschreven direct op zowel iOS als Android gebruiken. U hoeft niet voor elk een afzonderlijk bouwproces te doorlopen. Open gewoon een Expo-app in de Expo Client-app van de App Store op iOS of Android (of in een simulator of emulator op uw computer).

Push-meldingen

Pushmeldingen werken direct uit de doos voor zowel iOS als Android, met behulp van een enkele, uniforme API. U hoeft geen APNS en GCM/FCM in te stellen of ZeroPush of iets dergelijks te configureren. We denken dat we dit nu zo gemakkelijk mogelijk hebben gemaakt.

Facebook-aanmelding

Het kan lang duren voordat je het zelf goed hebt ingesteld, maar je zou het in 10 minuten of minder moeten kunnen werken op Expo.

Onmiddellijk bijwerken

Alle Expo-apps kunnen binnen enkele seconden worden bijgewerkt door op Publiceren in XDE te klikken. U hoeft niets in te stellen; het werkt gewoon zo. Als je Expo niet gebruikt, zou je ofwel Microsoft Code Push gebruiken of je eigen oplossing voor dit probleem gebruiken

Activabeheer

Afbeeldingen, video’s, lettertypen, enz. worden met Expo allemaal dynamisch via internet gedistribueerd. Dit betekent dat ze werken met onmiddellijke updates en on-the-fly kunnen worden gewijzigd. Het in Expo ingebouwde activabeheersysteem zorgt ervoor dat alle activa in uw repo naar een CDN worden geüpload, zodat ze voor iedereen snel kunnen worden geladen.

Zonder Expo is het normaal om uw activa in uw app te bundelen, wat betekent dat u ze niet kunt wijzigen. Of u moet zelf uw vermogen op een CDN of iets dergelijks zetten.

Gemakkelijker updaten naar nieuwe React Native-releases

We doen elke paar weken nieuwe releases van Expo. Je kunt op een oude versie van React Native blijven als je wilt, of upgraden naar een nieuwe, zonder dat je je zorgen hoeft te maken over het opnieuw opbouwen van je binaire app. U kunt zich in uw eigen tijd zorgen maken over het upgraden van JavaScript.

Maar geen native modules…

Het meest beperkende aan Expo is dat je je eigen native modules niet kunt toevoegen zonder ExpoKit los te koppelen en te gebruiken.


Antwoord 5, autoriteit 7%

EXPO CLI

Pluspunten:

  1. Het is niet nodig om Android Studio of Xcode te installeren om te beginnen met bouwen.
  2. Niet veel configuratie vereist.
  3. Mobiele gebruikersinterface om eenvoudig te bekijken op zowel Android als iPhone met behulp van barcodescanning. Ook gemakkelijker te bekijken met online iphone- en Android-simulators.
  4. Sneller instellen en ontwikkelen.

Nadelen:

  1. Native afhankelijkheden kunnen niet worden toegevoegd.
  2. Het maken van .apk– en .ipa-bestanden is moeilijk.
  3. De grootte van apk/ipa is enorm.

Reageer native CLI

Pluspunten:

  1. Voeg eenvoudig native afhankelijkheden toe.
  2. Het maken van .apk– en .ipa-bestanden is veel eenvoudiger dan met Expo

Opmerking: React Native CLI is het framework om rechtstreeks met het React Native-framework te werken.

Nadelen:

  1. Hoog configuratieniveau vereist.
  2. Basiskennis van de mappenstructuur van Android en iOS vereist.

Zoals je kunt zien, hebben beide benaderingen hun voor- en nadelen; u moet altijd beslissen welke u wilt gebruiken op basis van uw behoeften voor het project.


Antwoord 6

De antwoorden over de voor- en nadelen van expo en react-native-cli zijn compleet. Ik wil nog een ander punt noemen als mijn persoonlijke ervaring. Expo bevat standaard veel modules in het project en maakt het gemakkelijker om ermee te werken. Maar het heeft een groot probleem in de productiefase omdat de gebouwde versies androiden ioszo’n groot formaat hebben. Als u bijvoorbeeld een enkele pagina heeft met een 'Hello World', zou de bestandsgrootte apkongeveer 19 MBzijn. Het hebben van hetzelfde project in react-native-cli zal resulteren in een app met de grootte van 6 MB.

Dus persoonlijk raad ik het gebruik van expo niet aan als je een commerciële app wilt ontwikkelen.


Antwoord 7

Ik wil hier opmerken dat Expo een oudere versie van react 16.5 gebruikt, wat je zou verbieden om de nieuwe hooks-functie te gebruiken. Als u besluit om met Expo te gaan, let dan op uw versiebeheer. Oudere versies van bijvoorbeeld reageren-navigatie moeten worden gebruikt met de 16.5-versie als je rare fouten krijgt.


Antwoord 8

expo is een toolchain die is gebouwd rond React Native om je te helpen snel een app te starten.
Het biedt een reeks tools die de ontwikkeling en het testen van de React Native-app en interface en services vereenvoudigen die gewoonlijk beschikbaar zijn in native React Native-componenten van derden. Met Expo kun je ze allemaal vinden in Expo SDK.


Antwoord 9

Ik heb meer dan een jaar ervaren dat het werkt met expo
Als de grootte van de app niet belangrijk voor je is, gebruik dan Expo omdat het gemakkelijk te implementeren is Map, Push makkelijker dan React-native, maar aan het einde van het project als je een app wilt publiceren in Google Play of een andere winkel heb je een uitdaging voor verwijder wat toestemming in uw APK
React-native kun je alles veranderen, maar voor het importeren van een bibliotheek zoals pushmeldingen of de kaart heb je ook wat uitdagingen nodig omdat je deze bibliotheken handmatig moet toevoegen aan Android- en iOS-projecten


Antwoord 10

Expo is een wrapper van react native cli, die dingen onder de motorkap doet voor het gemak van ontwikkelaars, het meest voorkomende probleem dat expo oplost dat ontwikkelaar zich geen zorgen hoeft te maken over de koppelingsproblemen van de bibliotheken die vaak voorkomen in react native kl. Expo komt nu met tonnen bibliotheken die uiterst nuttig zijn voor robuuste ontwikkeling. Een van de voordelen van expo is dat je een app voor Android en ios kunt ontwikkelen zonder mac via de mobiele expo-app.

Omdat het tal van voordelen heeft, zijn er enkele nadelen aan het gebruik van expo

  • App-grootte neemt enorm toe. Eenvoudige hallo wereld app grootte > 30 mb
  • Op momenten dat je native functionaliteit in je app moet implementeren, moet je de expo uitwerpen en teruggaan om native cli te reageren. En je kunt het nooit terugzetten naar expo cli.

Other episodes