Qual è la differenza tra Expo e React Native?


Risposte:


209

Lavoro a Expo!

Quando scrivi il codice Expo, scrivi il React Nativecodice. Expoha due pezzi principali:

1) expo-cli : uno strumento di sviluppo per la creazione di progetti, la visualizzazione di registri, l'apertura sul dispositivo, la pubblicazione, ecc.

2) Il Expoclient: un'app sul tuo telefono che ti consente di aprire i tuoi progetti mentre ci lavori, senza bisogno di passare attraverso XCodeo Android Studio, e permette anche ad altre persone di vederli! E se lo pubblichi attraverso expo-cli, le persone possono accedervi in ​​qualsiasi momento tramite il Expoclient su Android o iOS se hanno effettuato l'accesso allo stesso account con cui è stato pubblicato. Infine, consentiamo anche di creare app autonome in modo che le persone non debbano utilizzare il Expoclient per aprirlo e, se lo desideri, puoi distribuirlo sull'app store e giocare al Play Store.

Quindi, Expoè un insieme di strumenti costruito sopra / intornoReact Native . Questi strumenti dipendono da una convinzione chiave a cui teniamo Expo: è possibile costruire la maggior parte delle app senza mai dover scrivere codice nativo, a condizione che tu abbia una serie completa di API esposte aJavascript .

Questo è importante perché con React Native te puoi sempre passare al codice nativo. Questo è incredibilmente utile a volte ma ha un costo: devi inviare alle persone i tuoi file binari se vuoi che li testino, qualcuno dall'altra parte del mondo non può semplicemente toccare un link per aprirlo mentre lavori su di esso e non puoi semplicemente pubblicarlo con un clic affinché qualcuno possa accedervi in ​​modo simile a come faresti in un browser.

Con Expo , ti suggeriamo di provare a evitare di passare al codice nativo, se puoi. Come ho detto sopra, pensiamo che con un set completo di API disponibili perJavascript questo non dovrebbe essere necessario per la maggior parte delle app. Quindi, miriamo a fornire questo set completo di API e quindi creare tutti i fantastici strumenti che possono esistere in un mondo in cui è condiviso il runtime nativo.

Tuttavia, se devi trovare assolutamente il menu a discesa nativo, puoi utilizzare ExpoKitper continuare a utilizzare le API native che Expoti offrono pur avendo lo stesso livello di controllo che avresti in qualsiasi progetto nativo. " ExpoKitè una libreria Objective-C e Java che consente di utilizzare la Expopiattaforma e il Expoprogetto esistente come parte di un progetto nativo standard più ampio." Leggi di più qui.


5
"Con Exponent, non puoi passare al codice nativo". È bello sapere che NON DEVI passare al codice nativo, ma che ne dici se è necessario, perché Exponent ti impedirebbe di farlo?
Otto

3
Ah, posso vedere come non fosse chiaro. Quindi il client Exponent è completamente open source ( github.com/exponentjs/exponent ), il che significa che puoi scrivere codice nativo se vuoi, ma poi stai effettivamente trattando le librerie Exponent come una raccolta di moduli nativi in ​​un nativo React altrimenti tipico app. Questo va benissimo ed è stato un motivo per noi per aprire il progetto. Detto questo, se vuoi essere in grado di utilizzare i nostri strumenti (generatore di binari di app, client Exponent sull'app / play store per condividere build di test, notifiche push integrate, ecc.), Non puoi scrivere codice nativo.
brentvatne,

al momento della stesura di questo documento, Expo è diventata piuttosto brava con l'integrazione di utili plug-in nativi. Tuttavia, manca un'integrazione MAJOR per IAP e senza di essa non puoi guadagnare con la tua app !!! E chiedi, qual è il punto di creare un'app se non riesco a fare profitti !!
Adam

97

Ho provato a fare un riassunto della documentazione e delle risposte dei dipendenti di Expo:

React Native init:

Vantaggi :

  • È possibile aggiungere moduli nativi scritti in Java / Objective-C (probabilmente l'unico ma il più forte)

Svantaggi :

  • Ha bisogno di Android Studio e XCode per eseguire i progetti
  • Non puoi sviluppare per iOS senza avere un mac
  • Il dispositivo deve essere collegato tramite USB per utilizzarlo per i test
  • I caratteri devono essere importati manualmente in XCode
  • Se si desidera condividere l'app, è necessario inviare l'intero file .apk / .ipa
  • Non fornisce API JS predefinite, ad esempio Notifiche push, Gestione risorse, devono essere installate manualmente e collegate ad esempio npm
  • Impostare correttamente un progetto di lavoro (compresa la configurazione del dispositivo) è piuttosto complicato e può richiedere del tempo

Expo

Vantaggi :

  • La creazione di un progetto è semplice e può essere eseguita in pochi minuti
  • Tu (e altre persone) potete aprire il progetto mentre ci state lavorando
  • La condivisione dell'app è semplice (tramite QR-code o link), non è necessario inviare l'intero file .apk o .ipa
  • Nessuna build necessaria per eseguire l'app
  • Integra alcune librerie di base in un progetto standard (Notifiche push, Gestione risorse, ...)
  • Puoi espellerlo su ExpoKit e integrare il codice nativo continuando ad utilizzare alcune delle funzionalità di Expo, ma non tutte
  • Expo è in grado di creare file .apk e .ipa (la distribuzione ai negozi è possibile con Expo)

Svantaggi :

  • Non è possibile aggiungere moduli nativi (probabilmente un gamechanger per alcuni)
  • Non è possibile utilizzare librerie che utilizzano codice nativo in Objective-C / Java
  • L'app Hello World standard è grande circa 25 MB (a causa delle librerie integrate)
  • Se si desidera utilizzare: FaceDetector, ARKit o Payments, è necessario espellerlo su ExpoKit
  • Espellerlo su ExpoKit ha un compromesso con le funzionalità di Expo, ad esempio non è possibile condividere tramite il codice QR
  • Quando si espelle a ExpoKit, si è limitati alla versione nativa di reazione supportata da ExpoKit in quel momento
  • Il debug in ExpoKit (con moduli nativi) è molto più complicato, dal momento che mescola due lingue e librerie diverse (nessun supporto ufficiale Expo più)

Spero di poter riassumere i punti più importanti. Non esitate a aggiungere punti aggiuntivi.

Fonti: https://code.tutsplus.com/tutorials/detaching-expo-apps-to-expokit-concepts--cms-30661 https://github.com/react-community/create-react-native-app/ numeri / 516 # issuecomment-373629114 https://docs.expo.io/versions/latest/guides/detach.html (documentazione ufficiale in generale)


1
Grazie @BenjaminHeinke per una chiara immagine di vantaggi e svantaggi. Sto già vivendo lo svantaggio n. 2 con la nostra decisione di adottare expo per l'app nativa fuori reazione. Per questo motivo non possiamo integrarci con Appsee. Non c'è soluzione alternativa per questo?
CoolDocMan,

2
Il dispositivo non deve essere collegato a USB per i test, solo la prima compilazione e installazione devono essere eseguite tramite USB. Successivamente puoi utilizzare il Wi-Fi! Avrai bisogno di una ricompilazione se apporti modifiche a native.
rszalski,

30

La risposta di Brent Vatne va bene, ma vorrei aggiungere alcuni dettagli.


Expo espande la superficie API di React Native

React Native non ti offre tutte le API JS necessarie, ma solo le funzionalità più primitive. Gli sviluppatori React Native dovrebbero utilizzare Android Studio / XCode per collegare ulteriori librerie native. Expo mira a migliorare RN e fornire tutte le API JS necessarie per le esigenze più comuni. È fondamentalmente un insieme di librerie native di qualità ben definite già confezionate per te in un'unica libreria: ExpoKit. A volte queste librerie sono già esistenti nel mondo RN e integrate in ExpoKit.

È anche importante notare che il team di Expo non può includere tutte le librerie disponibili in ExpoKit (il che può creare qualche frustrazione) perché le dimensioni dell'app Hello World aumenterebbero, in quanto spedirebbero molte API che non verrebbero utilizzate nella maggior parte delle app.

Expo fornisce aggiornamenti JS over-the-air

Come altri sistemi (CodePush ...), Expo fornisce un sistema per aggiornare la tua app via etere. Ciò significa che carichi il tuo pacchetto JS su una CDN e le app mobili scaricheranno e utilizzeranno automaticamente il nuovo JS al prossimo avvio (senza richiedere una pubblicazione / recensione dagli store).

Expo fornisce uno strumento CLI per caricare / gestire i bundle JS sulla loro rete CDN. Per lo sviluppo puoi anche scegliere di diventare la CDN e ospitare il bundle JS su localhost. E XDE è solo un visual wrapper sulla CLI.

Expo offre un cliente generico

Il client Expo è un client generico che consente di caricare qualsiasi app compatibile con Expo. Tutte le app di Expo condividono esattamente lo stesso runtime nativo (RN + ExpoKit), l'unica differenza è il JS che offriamo. Le app Expo che pubblichi negli app store hanno l'URL del tuo bundle JS codificato al suo interno. Il client Expo viene creato in un modo specifico in modo da poter scegliere da quale url caricare JS, scansionando un QRCode o fornendo un url.

Nota che questo client può anche caricare bundle JS da localhost e rendere più semplice la tua esperienza di sviluppo: non è necessario XCode o Android Studio e diventa molto più veloce per far funzionare il tuo primo Hello World sul telefono (da ore a minuti). Puoi effettivamente svilupparti su un iPhone senza Mac e l'installazione richiede 2 minuti.

In realtà, poiché l'Expo SDK può essere aggiornato, il client Expo include un livello di compatibilità che consente di eseguire le ultime 5 versioni dell'SDK.

Expo offre un servizio di build

Poiché tutte le app di Expo condividono lo stesso codice nativo, Expo è in grado di creare facilmente queste app per te. Hanno creato un servizio di cloud build.

La cosa principale che differenzia 2 app create da Expo è solo l'URL codificato su cui si suppone che l'app scarichi il bundle JS per l'esecuzione.

Expo fa alcune altre cose per te, come fornire un modo dichiarativo per configurare icone dell'app, orientamenti, autorizzazioni, chiavi API, aiutarti a impostare notifiche push, profili di provisioning ... molte impostazioni devono essere codificate al momento della compilazione nell'app e possono essere cambiato via etere.

Expo sta per reagire ai nativi come Phonegap è per Cordova

React Native è Cordova simile. Non è la stessa tecnologia di visualizzazione (native vs webview) ma entrambe consentono di controllare le funzionalità native da javascript ed entrambe offrono un sistema di plugin in modo che gli sviluppatori possano aggiungere facilmente nuovi collegamenti JS / nativi.

PhoneGap è simile a Expo. Entrambi cercano di arricchire l'API non elaborata della piattaforma sottostante su cui sono basati con un set predefinito di plug-in nativi aggiuntivi. PhoneGap offre anche un servizio di build e un client generico che funziona fintanto che si utilizzano i plug-in approvati.

Conclusione

Come puoi vedere, Expo è un insieme di strumenti. Alla fine consente di sviluppare, condividere e pubblicare facilmente nei negozi i tuoi progetti mobili. È abbastanza simile all'esperienza PhoneGap (ma molto meglio e meno confusa).

Raccomanderò definitivamente Expo per qualsiasi nuovo progetto greenfield di React Native, ad eccezione di questi 2 casi:

  • Sai già che hai bisogno di API che non sono disponibili in Expo e non lo saranno presto
  • Ti preoccupi molto delle dimensioni della tua app (HelloWorld è> 25mb a causa delle grandi dimensioni di ExpoKit, ma dopo ciò non aumenta molto in quanto è solo JS)

1
Sto cercando di trovare un elenco di Expo dell'API non supportato. Qualcuno sa dove trovarlo?
Ronnyrr,

@ronnyrr Expo non supporta tutto ciò che non è JS e che non è incluso in Raw RN ed ExpoKit. Esiste un elenco infinito di cose che Expo non supporta, perché è tutto il resto che non è nell'elenco finito delle funzionalità che Expo supporta. Quello che chiedi non può esistere.
Sebastien Lorber

2
@ronnyrr Penso che questo sia quello che stai cercando: expo.canny.io è un elenco di richieste di funzionalità che puoi ordinare per popolarità
Evan Bacon,

26

È spiegato nella documentazione ufficiale di Expo

Qual è la differenza tra Expo e React Native?

Expo è un po 'come Rails for React Native. Molte cose sono impostate per te, quindi è più rapido iniziare e sulla strada giusta.

Con Expo, non hai bisogno di Xcode o Android Studio. Devi solo scrivere JavaScript usando qualunque editor di testo tu sia a tuo agio (Atom, vim, emacs, Sublime, VS Code, qualunque cosa tu voglia). Puoi eseguire XDE (il nostro software desktop) su Mac, Windows e Linux.

Ecco alcune delle cose che Expo ti offre fin da subito e che funzionano subito:

Supporto per iOS e Android

Puoi usare app scritte in Expo sia su iOS che su Android immediatamente. Non è necessario passare attraverso un processo di generazione separato per ognuno. Apri qualsiasi app Expo nell'app Expo Client dall'App Store su iOS o Android (o in un simulatore o emulatore sul tuo computer).

Notifiche push

Le notifiche push funzionano immediatamente sia su iOS che su Android, utilizzando un'unica API unificata. Non è necessario impostare APNS e GCM / FCM o configurare ZeroPush o qualcosa del genere. Pensiamo di averlo reso tanto semplice come può essere adesso.

Accesso a Facebook

Questo può richiedere molto tempo per essere configurato correttamente, ma dovresti riuscire a farlo funzionare in 10 minuti o meno su Expo.

Aggiornamento istantaneo

Tutte le app di Expo possono essere aggiornate in pochi secondi facendo semplicemente clic su Pubblica in XDE. Non devi impostare nulla; funziona così. Se non si utilizza Expo, utilizzare Microsoft Code Push o rotolare la propria soluzione per questo problema

Gestione delle risorse

Immagini, video, caratteri, ecc. Sono tutti distribuiti dinamicamente su Internet con Expo. Ciò significa che funzionano con un aggiornamento istantaneo e possono essere modificati al volo. Il sistema di gestione delle risorse integrato in Expo si occupa di caricare tutte le risorse nel tuo repository su una CDN in modo che vengano caricate rapidamente per chiunque.

Senza Expo, la cosa normale da fare è raggruppare le risorse nella tua app, il che significa che non puoi modificarle. O dovresti riuscire a mettere le tue risorse su un CDN o simili da solo.

Aggiornamento più semplice alle nuove versioni native di React

Facciamo nuove uscite di Expo ogni poche settimane. Puoi rimanere su una vecchia versione di React Native se vuoi, o passare a una nuova versione, senza preoccuparti di ricostruire il file binario dell'app. Puoi preoccuparti di aggiornare JavaScript nel tuo tempo libero.

Ma nessun modulo nativo ...

La cosa più limitante di Expo è che non puoi aggiungere i tuoi moduli nativi senza staccare e usare ExpoKit.


2
sto usando expo in Windows 8. come generare il codice QR in modo da eseguire direttamente la mia app sul mio dispositivo.
Prasanna,

1
Non l'ho provato su Windows, ma penso che debba essere simile su qualsiasi sistema. Il codice QR viene generato automaticamente in entrambiExpo XDE console o exp startnell'output del comando della console.
Gumkins

1
$ prasanna A volte non vedi un codice QR perché non hai il telefono e la macchina di sviluppo sulla stessa rete. Ad esempio, se lavori a casa, assicurati che il tuo telefono sia sulla tua rete domestica. E ecc ...
ccalvert

expo start ti mostrerà anche un indirizzo IP sul tuo localhost da cui puoi accedere al codice QR
Jordan Simba il

7

CLI EXPO

professionisti:-

 1. No need to install Android studio and Xcode for start building mobile app.
 2. No requirement of high configuration machine for development.
 3. Mobile ui easily check on both devices android and iphone using barcode scanning.and some time you can check on online iphone and android simulators.
 4. fast development.

Contro: -

 1. Native dependency can not add on expo because expo project don't have ios and android folder so here expo is bounded.
 2. Making apk and ipa are to difficult  using expo.
 3. Size of the apk/ipa is huge

React Native Cli

Professionisti:-

 1. Easily add native dependency for android and ios because this project structure have ios and android folder.
 2. Apk and ipa build making is easy rather than expo.

Note":- React Native cli is right approach to started work on react native framework.

Contro: -

1. High configuration machine is require.
2. Adding dependency some time more difficult but good.
3. Required basic knowledge of android folder structure and ios folder structure but from this learn more things.

Puoi preferire qualsiasi approccio in base alle tue esigenze.


2

Vorrei prendere nota qui che Expo sta usando una versione precedente di reagire 16.5 Che vi proibirebbe di usare la nuova funzione hook. Se decidi di andare con Expo, fai attenzione a guardare i controlli della tua versione. Le versioni precedenti di dicono di reagire alla navigazione dovranno essere utilizzate con la versione 16.5 se si verificano strani errori.


expo updatefa un ottimo lavoro nell'ottenere le versioni compatibili per la maggior parte dei pacchetti gestiti da Expo. A partire da ora, non credo che aggiorni React Navigation, ma quella biblioteca è in realtà sponsorizzata da Expo. Personalmente, raramente mi imbatto in problemi di compatibilità tra React Navigation ed Expo (penso di aver riscontrato un paio di problemi durante l'utilizzo delle versioni beta). Tuttavia, potresti riscontrare ulteriori problemi di compatibilità con i pacchetti non gestiti da Expo.
Christian Juth,

2

Le risposte su vantaggi e svantaggi di expo e reagire-native-cli sono complete. Voglio menzionare un altro punto come esperienza personale. Expo contiene molti moduli per impostazione predefinita nel progetto e semplifica il lavoro con esso. Ma ha un grosso problema in fase di produzione perché il costruito androide le iosversioni hanno dimensioni così grandi. Ad esempio, se hai una singola pagina con una dimensione 'Hello World'del apkfile sarebbe circa 19 MB. Avere uno stesso progetto in React-native-cli si tradurrà in un'app delle dimensioni di6 MB .

Quindi personalmente non consiglio di usare Expo se vuoi sviluppare un'app commerciale.


Non penso che questo sia un motivo sufficiente per le app di Expo di non essere pronte per la produzione. Inoltre questo è stato completamente spiegato dalle risposte precedenti
Dawoodjee,

1

Ho sperimentato più di un anno che funziona con expo Se The Size dell'app non è importante per te usa Expo perché è facile implementare Map, Push più semplice di React-native ma alla fine del progetto se vuoi pubblicare app in Google Play o in un altro negozio hai una sfida per rimuovere alcune autorizzazioni nel tuo APK React-native puoi cambiare tutto ma per importare alcune librerie come la notifica push o la mappa richiede anche alcune sfide perché devi aggiungere queste librerie manualmente a progetti Android e iOS


-1

expo è una toolchain costruita attorno a React Native per aiutarti a avviare rapidamente un'app. Fornisce una serie di strumenti che semplificano lo sviluppo e il test dell'app React Native e dell'interfaccia e dei servizi che sono normalmente disponibili nei componenti nativi di React Native di terze parti. Con Expo puoi trovarli tutti in Expo SDK.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.