Jaka jest różnica między Expo a React Native?

Odpowiedzi:

206

Pracuję na Expo!

Kiedy piszesz kod Expo, piszesz React Nativekod. Expoma dwa główne elementy:

1) expo-cli: narzędzie programistyczne do tworzenia projektów, przeglądania dzienników, otwierania na urządzeniu, publikowania itp.

2) ExpoKlient: aplikacja na telefon, która umożliwia otwieranie projektów podczas pracy nad nimi, bez konieczności przechodzenia przez XCodelub Android Studio, a także pozwala innym osobom je przeglądać! A jeśli opublikujesz go za pośrednictwem expo-cli, ludzie będą mogli uzyskać do niego dostęp w dowolnym momencie za pośrednictwem Expoklienta na Androida lub iOS, jeśli zalogujesz się na to samo konto, na którym zostało opublikowane. Wreszcie, umożliwiamy również tworzenie samodzielnych aplikacji, aby ludzie nie musieli używać Expoklienta do otwierania go, a Ty możesz dystrybuować do sklepu z aplikacjami i sklepu Play, jeśli chcesz.

Tak, Expoto zestaw narzędzi zbudowany na górze / wokół React Native. Narzędzia te zależą od jednego z naszych głównych przekonań Expo: możliwe jest tworzenie większości aplikacji bez konieczności pisania kodu natywnego, pod warunkiem, że masz do dyspozycji pełny zestaw interfejsów API Javascript.

Jest to ważne, ponieważ React Nativezawsze możesz zejść do kodu natywnego. Czasami jest to niezwykle pomocne, ale wiąże się z pewnymi kosztami: musisz wysłać ludziom swoje pliki binarne, jeśli chcesz, aby je przetestowali, ktoś po drugiej stronie świata nie może po prostu stuknąć łącza, aby je otworzyć podczas pracy i nie można po prostu opublikować go jednym kliknięciem, aby ktoś mógł uzyskać do niego dostęp podobny do tego w przeglądarce.

Z Expo, sugerujemy, aby spróbować unikać rozwijania kodu natywnego, jeśli możesz. Jak wspomniałem powyżej, uważamy, że przy dostępie do kompleksowego zestawu interfejsów API Javascriptnie powinno to być konieczne w przypadku większości aplikacji. Naszym celem jest zapewnienie tego kompleksowego zestawu interfejsów API, a następnie zbudowanie wszystkich niesamowitych narzędzi, które mogą istnieć w świecie, w którym natywny środowisko wykonawcze jest udostępniane.

Jeśli jednak musisz przekonać się, że całkowicie upuściłeś system natywny, możesz użyć go, ExpoKitaby nadal korzystać z natywnych interfejsów API, które Expodają ci taki sam poziom kontroli, jak w przypadku każdego projektu natywnego. „ ExpoKitto biblioteka Objective-C i Java, która umożliwia korzystanie z Expoplatformy i istniejącego Expoprojektu w ramach większego standardowego projektu natywnego”. Przeczytaj więcej tutaj.

brentvatne
źródło
4
„Z Exponent nie można przejść do kodu natywnego”. Fajnie jest wiedzieć, że NIE MUSISZ przejść do kodu natywnego, ale co jeśli musisz, dlaczego Exponent miałby ci to uniemożliwić?
Otto,
3
Ach, widzę, jak to było niejasne. Tak więc klient Exponent jest całkowicie open source ( github.com/exponentjs/exponent ), co oznacza, że ​​możesz pisać kod natywny, jeśli chcesz, ale wtedy skutecznie traktujesz biblioteki Exponent jako kolekcję modułów natywnych w typowo skądinąd React Native app. Jest to całkowicie w porządku i było dla nas motywacją do otwarcia projektu. To powiedziawszy, jeśli chcesz mieć możliwość korzystania z naszych narzędzi (konstruktora binarnego aplikacji, klienta Exponent w sklepie app / play do udostępniania kompilacji testowych, wbudowanych powiadomień push itp.), To nie możesz pisać kodu natywnego.
brentvatne
w momencie pisania tego artykułu Expo całkiem dobrze zintegrowało przydatne natywne wtyczki. Brakuje im jednak integracji wtyczki MAJOR dla IAP i bez niej nie możesz zarabiać na swojej aplikacji !!! I pytasz, jaki jest sens tworzenia aplikacji, jeśli nie mogę zarobić !!
Adam
96

Próbowałem zrobić streszczenie dokumentacji i odpowiedzi od pracowników Expo:

React Native init:

Zalety :

  • Możesz dodać moduły natywne napisane w Javie / Objective-C (prawdopodobnie jedyny, ale najsilniejszy)

Wady :

  • Potrzebuje Androida Studio i XCode do prowadzenia projektów
  • Nie możesz programować na iOS bez komputera Mac
  • Urządzenie musi być podłączone przez USB, aby użyć go do testowania
  • Czcionki należy importować ręcznie w XCode
  • Jeśli chcesz udostępnić aplikację, musisz wysłać cały plik .apk / .ipa
  • Nie zapewnia gotowych interfejsów API JS, np. Push-Notifications, Asset Manager, należy je ręcznie zainstalować i połączyć np. Z npm
  • Prawidłowe skonfigurowanie działającego projektu (w tym konfiguracja urządzenia) jest dość skomplikowane i może zająć trochę czasu

Expo

Zalety :

  • Utworzenie projektu jest łatwe i można to zrobić w kilka minut
  • Ty (i inne osoby) możesz otworzyć projekt, gdy nad nim pracujesz
  • Udostępnianie aplikacji jest łatwe (przez kod QR lub link), nie musisz wysyłać całego pliku .apk lub .ipa
  • Nie jest wymagana kompilacja do uruchomienia aplikacji
  • Integruje niektóre podstawowe biblioteki ze standardowym projektem (powiadomienia push, Asset Manager, ...)
  • Możesz go wysunąć do ExpoKit i zintegrować natywny kod, kontynuując korzystanie z niektórych funkcji Expo, ale nie wszystkich
  • Expo może budować pliki .apk i .ipa (dystrybucja do sklepów możliwa z Expo)

Wady :

  • Nie możesz dodawać natywnych modułów (prawdopodobnie dla niektórych zmieniaczy gier)
  • W Objective-C / Java nie można używać bibliotek korzystających z kodu natywnego
  • Standardowa aplikacja Hello World ma około 25 MB (ze względu na zintegrowane biblioteki)
  • Jeśli chcesz użyć: FaceDetector, ARKit lub Payments, musisz wysunąć go do ExpoKit
  • Wyrzucenie go do ExpoKit ma kompromis między funkcjami Expo, np. Nie można udostępniać za pomocą kodu QR
  • Podczas wysuwania do ExpoKit jesteś ograniczony do reagującej wersji natywnej obsługiwanej przez ExpoKit w tym momencie
  • Debugowanie w ExpoKit (z modułami natywnymi) jest o wiele bardziej skomplikowane, ponieważ łączy dwa języki i różne biblioteki (nie ma już oficjalnej obsługi Expo)

Mam nadzieję, że mógłbym podsumować najważniejsze punkty. Dodaj dodatkowe punkty.

Źródła: https://code.tutsplus.com/tutorials/detaching-expo-apps-to-expokit-concepts--cms-30661 https://github.com/react-community/create-react-native-app/ Issues / 516 # emisecomment-373629114 https://docs.expo.io/versions/latest/guides/detach.html (ogólna dokumentacja oficjalna)

Benjamin Heinke
źródło
1
Kolejną poważną wadą korzystania z expo jest rozmiar aplikacji. Minimalny rozmiar to ~ 25 MB dla aplikacji na iOS i ~ 20 MB dla aplikacji na Androida
Pratik Singhal 26'18
3
Jest to już wspomniane jako wada projektu expo: „Standardowa aplikacja Hello World ma około 25 MB (ze względu na zintegrowane biblioteki)”
Benjamin Heinke
1
Dziękuję @BenjaminHeinke za jasny obraz zalet i wad. Już teraz odczuwam niekorzystną sytuację # 2 w związku z naszą decyzją o przyjęciu expo dla naszej aplikacji natywnej. Z tego powodu nie możemy zintegrować się z Appsee. Czy nie ma na to obejścia?
CoolDocMan,
1
Urządzenie nie musi być podłączone do USB do testów, tylko pierwszą kompilację i instalację należy wykonać przez USB. Później możesz korzystać z Wi-Fi! Będzie jednak wymagać ponownej kompilacji, jeśli wprowadzisz zmiany w natywnym.
rszalski
28

Odpowiedź Brenta Vatne jest dobra, ale chciałbym dodać kilka szczegółów.


Expo rozszerza powierzchnię API React Native

React Native nie zapewnia wszystkich potrzebnych interfejsów API JS, ale tylko najbardziej prymitywne funkcje. React Natywni programiści powinni używać Androida Studio / XCode do łączenia dodatkowych bibliotek natywnych. Expo ma na celu ulepszenie RN i zapewnienie wszystkich interfejsów API JS, których potrzebujesz do najbardziej powszechnych potrzeb. Zasadniczo jest to zestaw dobrze zdefiniowanych rodzimych bibliotek lib, które zostały już spakowane w jednym pakiecie: ExpoKit. Czasami biblioteki te już istnieją w świecie RN i są zintegrowane z ExpoKit.

Ważne jest również, aby zauważyć, że zespół Expo nie może uwzględnić wszystkich bibliotek dostępnych w ExpoKit (co może powodować frustrację), ponieważ zwiększy się rozmiar aplikacji hello world, ponieważ dostarczy wiele interfejsów API, które nie zostaną użyte w większości aplikacji.

Expo zapewnia bezprzewodową aktualizację JS

Podobnie jak inne systemy (CodePush ...), Expo zapewnia system do aktualizacji aplikacji bezprzewodowo. Oznacza to, że prześlesz pakiet JS do CDN, a aplikacje mobilne automatycznie pobiorą nowy JS i użyją go przy następnym uruchomieniu (bez żądania publikacji / recenzji ze sklepów).

Expo zapewnia narzędzie CLI do przesyłania / zarządzania pakietami JS w ich CDN. W celu rozwoju możesz także zostać CDN i hostować pakiet JS na localhost. A XDE to tylko wizualne opakowanie interfejsu CLI.

Expo zapewnia ogólny klient

Klient Expo to ogólny klient, który pozwala załadować dowolną aplikację zgodną z Expo. Wszystkie aplikacje Expo dzielą dokładnie ten sam natywny środowisko uruchomieniowe (RN + ExpoKit), jedyną różnicą jest JS, który im dajemy. Aplikacje Expo, które publikujesz w sklepach z aplikacjami, mają na stałe zapisany adres URL pakietu JS. Klient Expo jest budowany w określony sposób, dzięki czemu możesz wybrać, z którego adresu URL chcesz załadować JS, skanując kod QR lub podając adres URL.

Pamiętaj, że ten klient może również ładować pakiety JS z hosta lokalnego i ułatwiać programowanie: nie potrzebujesz XCode ani Android Studio, a pierwsze Hello World działa na telefonie (od godzin do minut). Możesz faktycznie tworzyć na iPhonie bez komputera Mac, a instalacja zajmuje 2 minuty.

W rzeczywistości, ponieważ pakiet Expo SDK może być aktualizowany, klient Expo zawiera warstwę kompatybilności, dzięki czemu jest w stanie uruchomić ostatnie 5 wersji SDK.

Expo zapewnia usługę kompilacji

Ponieważ wszystkie aplikacje Expo mają ten sam natywny kod, Expo jest w stanie z łatwością zbudować te aplikacje dla Ciebie. Stworzyli usługę kompilacji w chmurze.

Główną rzeczą, która odróżnia 2 aplikacje zbudowane przez Expo, jest tylko zakodowany adres URL, na który aplikacja ma pobrać pakiet JS, aby go uruchomić.

Expo robi dla ciebie inne rzeczy, takie jak zapewnienie deklaratywnego sposobu konfiguracji ikon aplikacji, orientacji, uprawnień, klawiszy interfejsu API, pomoc w konfiguracji powiadomień wypychanych, profile udostępniania ... wiele ustawień musi być zakodowanych na stałe podczas kompilacji w aplikacji i może nie można tego zmienić drogą powietrzną.

Expo ma React Native, czym jest Phonegap dla Cordova

React Native jest podobna do Cordova. Nie jest to ta sama technologia widoku (natywna vs przeglądanie stron internetowych), ale obie pozwalają kontrolować funkcje natywne z javascript i oba oferują system wtyczek, dzięki czemu programiści mogą łatwo dodawać nowe wiązania JS / natywne.

PhoneGap jest podobny do Expo. Obaj próbują wzbogacić surowy interfejs API platformy bazowej, na której są zbudowane, dzięki predefiniowanemu zestawowi dodatkowych rodzimych wtyczek. PhoneGap oferuje również usługę kompilacji i ma ogólny klient, który działa tak długo, jak korzystasz z zatwierdzonych wtyczek.

Wniosek

Jak widać, Expo to zestaw narzędzi. Na koniec pozwala łatwo opracowywać, udostępniać i publikować w sklepach projekty mobilne. Jest dość podobny do PhoneGap (ale o wiele lepszy i mniej mylący).

Zdecydowanie polecę Expo dla każdego nowego projektu Greenfield React Native, z wyjątkiem tych 2 przypadków:

  • Wiesz już, że potrzebujesz interfejsów API, które nie są dostępne w Expo i nie będą dostępne w najbliższym czasie
  • Bardzo zależy Ci na rozmiarze Twojej aplikacji (HelloWorld ma rozmiar> 25 MB ze względu na duży rozmiar ExpoKit, ale potem nie zwiększa się tak bardzo, jak tylko JS)
Sebastien Lorber
źródło
1
Próbuję znaleźć listę Expo API nie obsługuje. Czy ktoś wie, gdzie to znaleźć?
ronnyrr
@ronnyrr Expo nie obsługuje wszystkiego, co nie jest JS i nie jest zawarte w surowych RN i ExpoKit. Istnieje nieskończona lista rzeczy, których Expo nie obsługuje, ponieważ jest to wszystko, czego nie ma na skończonej liście funkcji, które Expo obsługuje. To, o co prosisz, nie może istnieć.
Sebastien Lorber,
2
@ronnyrr Myślę, że to jest to, czego szukasz: expo.canny.io to lista żądań funkcji, które możesz posortować według popularności
Evan Bacon
26

Jest to wyjaśnione w oficjalnej dokumentacji Expo

Jaka jest różnica między Expo a React Native?

Expo przypomina trochę Railsy dla React Native. Wiele rzeczy jest dla Ciebie skonfigurowanych, więc szybciej jest zacząć i podążać właściwą ścieżką.

Dzięki Expo nie potrzebujesz Xcode ani Android Studio. Po prostu piszesz JavaScript za pomocą dowolnego edytora tekstu, w którym czujesz się komfortowo (Atom, vim, emacs, Sublime, VS Code, cokolwiek chcesz). Możesz uruchomić XDE (nasze oprogramowanie komputerowe) na Mac, Windows i Linux.

Oto kilka rzeczy, które od razu daje Ci Expo:

Wsparcie dla iOS i Androida

Możesz korzystać z aplikacji napisanych w Expo zarówno na iOS, jak i Androida od razu po wyjęciu z pudełka. Nie musisz przechodzić osobnego procesu kompilacji dla każdego z nich. Wystarczy otworzyć dowolną aplikację Expo w aplikacji Expo Client ze sklepu App Store na iOS lub Android (lub w symulatorze lub emulatorze na komputerze).

Powiadomienia push

Powiadomienia wypychane działają od razu na urządzeniu z systemem iOS i Android przy użyciu jednego, zunifikowanego interfejsu API. Nie musisz konfigurować APNS i GCM / FCM ani konfigurować ZeroPush ani nic w tym stylu. Uważamy, że uczyniliśmy to tak łatwym, jak to tylko możliwe.

Nazwa użytkownika Facebook

Samodzielne skonfigurowanie może zająć dużo czasu, ale na Expo powinieneś być w stanie uruchomić go w ciągu 10 minut lub krócej.

Natychmiastowa aktualizacja

Wszystkie aplikacje Expo można zaktualizować w kilka sekund, klikając Publikuj w XDE. Nie musisz niczego konfigurować; to po prostu działa w ten sposób. Jeśli nie korzystasz z Expo, możesz użyć Microsoft Code Push lub stworzyć własne rozwiązanie tego problemu

Zarządzanie aktywami

Obrazy, filmy, czcionki itp. Są dynamicznie dystrybuowane przez Internet dzięki Expo. Oznacza to, że działają z natychmiastową aktualizacją i mogą być zmieniane na bieżąco. Wbudowany w Expo system zarządzania zasobami zajmuje się przesyłaniem wszystkich zasobów z repozytorium do CDN, aby mogły zostać szybko załadowane dla każdego.

Bez Expo normalną rzeczą jest połączenie zasobów w aplikację, co oznacza, że ​​nie możesz ich zmienić. Lub sam musisz zarządzać umieszczaniem swoich aktywów w sieci CDN lub podobnej.

Łatwiejsza aktualizacja do nowych wersji React Native

Wydajemy nowe wersje Expo co kilka tygodni. Możesz pozostać na starej wersji React Native, jeśli chcesz, lub uaktualnić do nowej, bez obawy o odbudowanie pliku binarnego aplikacji. Możesz martwić się o aktualizację JavaScript w swoim własnym czasie.

Ale nie ma natywnych modułów…

Najbardziej ograniczającą rzeczą w Expo jest to, że nie można dodawać własnych natywnych modułów bez odłączania i używania ExpoKit.

gumki
źródło
2
Używam expo w Windows 8. jak wygenerować kod QR, aby bezpośrednio uruchomić aplikację na moim urządzeniu.
Prasanna,
1
Nie próbowałem tego w systemie Windows, ale myślę, że musi być podobny w każdym systemie. Kod QR jest generowany automatycznie w Expo XDEkonsoli lub w exp startwynikach poleceń konsoli.
Gumkins
1
$ prasanna Czasami nie widzisz kodu QR, ponieważ nie masz telefonu i maszyny programistycznej w tej samej sieci. Na przykład, jeśli pracujesz w domu, upewnij się, że telefon jest w sieci domowej. I etc ...
ccalvert
expo startpokaże ci również adres IP na twoim lokalnym hoście, z którego możesz uzyskać dostęp do kodu QR z
Jordan Simba
7

EXPO CLI

plusy: -

 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.

Cons:-

 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

Plusy: -

 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.

Cons:-

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.

Możesz wybrać dowolne podejście zgodnie z własnymi wymaganiami.

Atul Tiwari
źródło
2

Zanotuję tutaj, że Expo używa starszej wersji reagowania 16.5, co zabraniałoby ci używania nowej funkcji hooków. Jeśli zdecydujesz się na Expo, pamiętaj o kontroli wersji. Starsze wersje powiedz „reaguj nawigację” będą musiały być używane z wersją 16.5, jeśli występują dziwne błędy.

SMW
źródło
expo updaterobi całkiem niezłą robotę, uzyskując kompatybilne wersje dla większości pakietów zarządzanych przez Expo. W tej chwili nie sądzę, aby aktualizowała React Navigation, ale ta biblioteka jest faktycznie sponsorowana przez Expo. Osobiście rzadko napotykam problemy z kompatybilnością między React Navigation i Expo (myślę, że napotkałem kilka problemów podczas korzystania z wersji beta). Jednak mogą pojawić się więcej problemów ze zgodnością z pakietami nie zarządzanymi przez Expo.
Christian Juth,
2

Odpowiedzi na temat zalet i wad expo i responsive-cli są kompletne. Chciałbym wspomnieć o innej kwestii jako moim osobistym doświadczeniu. Expo domyślnie zawiera wiele modułów w projekcie i ułatwia pracę z nim. Ale ma duży problem na etapie produkcji, ponieważ wersja androidi ioswersje mają tak świetne rozmiary. Na przykład, jeśli masz jedną stronę z rozmiar pliku będzie o . Posiadanie tego samego projektu w respons-native-cli zaowocuje aplikacją o rozmiarze .'Hello World'apk19 MB6 MB

Więc osobiście nie polecam korzystania z expo, jeśli chcesz opracować aplikację komercyjną.

Meisam Nazari
źródło
Nie sądzę, że jest to wystarczający powód, aby aplikacje expo nie były gotowe do produkcji. Poza tym zostało to dokładnie wyjaśnione w poprzednich odpowiedziach
Dawoodjee
1

Mam ponad rok, że działa z expo Jeśli rozmiar aplikacji nie jest dla Ciebie ważny, jeśli korzystasz z Expo, ponieważ łatwo jest wdrożyć Mapę, Push łatwiej niż React-native, ale na końcu projektu, jeśli chcesz opublikować aplikacji w Google Play lub innym sklepie masz wyzwanie, aby usunąć trochę Zezwolenia w swoim pakiecie APK React-native możesz zmienić wszystko, ale do importowania niektórych bibliotek, takich jak powiadomienia wypychane lub mapa również wymaga pewnych wyzwań, ponieważ musisz ręcznie dodać te biblioteki, aby projekty na Androida i iOS

Amir Ardalan
źródło
-1

expo to zestaw narzędzi oparty na React Native, aby pomóc Ci szybko uruchomić aplikację. Zapewnia zestaw narzędzi, które upraszczają tworzenie i testowanie aplikacji React Native oraz interfejsu i usług, które są zwykle dostępne w natywnych komponentach React Native innych firm. Dzięki Expo możesz je wszystkie znaleźć w Expo SDK.

Shivo'ham 0
źródło