Expo ve React Native arasındaki fark nedir?


Yanıtlar:


209

Expo'da çalışıyorum!

Kod yazdığınızda kod Expoyazıyorsunuz React Native. Expoiki ana parçası vardır:

1) expo-cli: proje oluşturmak, günlükleri görüntülemek, cihazınızda açmak, yayınlamak vb. İçin bir geliştirici aracı.

2) Expoİstemci: Telefonunuzda, üzerinde çalışırken projelerinizi açmanıza izin vermeden XCodeveya açmanıza gerek kalmadan Android Studiove diğer kişilerin de onları görmesine izin veren bir uygulama! Ayrıca aracılığıyla yayınlarsanız expo-cli, kullanıcılar Expo, aynı hesapta oturum açmışsa Android veya iOS üzerinden istemci aracılığıyla istedikleri zaman erişebilir . Son olarak, bağımsız uygulamaları oluşturmayı da mümkün kılıyoruz, böylece insanlar Expoistemciyi açmak için kullanmak zorunda kalmaz ve isterseniz uygulama mağazasına ve oyun mağazasına dağıtabilirsiniz.

Yani, Expoüstte / etrafında inşa edilmiş bir dizi araç React Native. Bu araçlar, sahip olduğumuz temel bir inanca dayanır Expo: maruz kaldığınız kapsamlı bir API setiniz olması şartıyla, yerel kod yazmanıza gerek kalmadan çoğu uygulamayı oluşturmak mümkündür Javascript.

Bu önemlidir, çünkü React Nativeher zaman yerel koda bırakabilirsiniz. Bu bazen inanılmaz derecede faydalıdır, ancak bir maliyeti vardır: Onları test etmelerini istiyorsanız, ikili dosyalarınızı insanlara göndermeniz gerekir, dünyanın diğer tarafındaki biri çalışırken sadece bir bağlantıya dokunamaz bir tarayıcıda nasıl kullandığınıza benzer şekilde tek bir tıklama ile yayınlayamazsınız.

İle Expo, mümkünse yerel koda bırakmaktan kaçınmanızı öneririz. Yukarıda bahsettiğim gibi, kapsamlı bir dizi API ile bunun Javascriptçoğu uygulama için gerekli olmadığını düşünüyoruz. Bu nedenle, bu kapsamlı API setini sağlamayı ve ardından yerel çalışma zamanının paylaşıldığı bir dünyada var olabilecek tüm harika araçları oluşturmayı amaçlıyoruz.

Bununla birlikte, kesinlikle ExpoKityerel olana geçtiğinizi tespit Expoetmeniz gerekiyorsa, herhangi bir yerel projede olduğu gibi aynı düzeyde kontrol sahibi olmanızı sağlayan yerel API'ları kullanmaya devam etmek için kullanabilirsiniz . " ExpoKit, Expoplatformu ve mevcut Expoprojenizi daha büyük bir standart yerel projenin parçası olarak kullanmanızı sağlayan bir Objective-C ve Java kütüphanesidir ." Daha fazlasını buradan okuyun.


5
"Üs ile yerel koda gidemezsiniz". Yerel koda gitmeniz gerekmediğini bilmek güzel, ama ya ihtiyacınız varsa, Exponent neden bunu yapmanızı engellesin?
Otto

3
Ah bunun nasıl belirsiz olduğunu görebiliyorum. Böylece, Exponent istemcisi tamamen açık kaynak kodludur ( github.com/exponentjs/exponent ). Uygulamanın. Bu tamamen iyi ve projeyi açık kaynak yapmamız için bir motivasyon kaynağı oldu. Bununla birlikte, araçlarımızı (uygulama ikili oluşturucusu, test yapılarını paylaşmak için uygulama / oyun deposundaki Üs istemcisi, yerleşik push bildirimleri vb.) Kullanmak istiyorsanız yerel kod yazamazsınız.
brentvatne

yazma sırasında, Expo yararlı yerel eklentileri entegre etmek ile oldukça iyi oldu. Ancak, onlar IAP için MAJOR eklenti entegrasyonu eksik ve onsuz, app kapalı para kazanamazsınız !!! Ve sen sormak, ben kar edemez eğer bir uygulama yapmanın anlamı nedir !!
Adam

97

Expo çalışanlarının dokümantasyon ve cevaplarının bir özetini yapmaya çalıştım:

Tepki Yerel başlatma:

Avantajları :

  • Java / Objective-C ile yazılmış yerel modüller ekleyebilirsiniz (muhtemelen tek ama en güçlü modül)

Dezavantajları :

  • Projeleri çalıştırmak için Android Studio ve XCode gerekir
  • Mac olmadan iOS için geliştiremezsiniz
  • Test için kullanmak için cihazın USB üzerinden bağlanması gerekir
  • Fontların XCode'da manuel olarak içe aktarılması gerekir
  • Uygulamayı paylaşmak istiyorsanız .apk / .ipa dosyasının tamamını göndermeniz gerekir
  • Kutusundan çıkarılmış JS API'leri sağlamaz, örneğin Push-Notifications, Asset Manager, örneğin manuel olarak kurulmaları ve npm ile bağlantılı olmaları gerekir
  • Çalışan bir projenin doğru şekilde kurulması (cihaz yapılandırmasını dahil etmek) oldukça karmaşıktır ve zaman alabilir

Expo

Avantajları :

  • Bir proje oluşturmak kolaydır ve birkaç dakika içinde yapılabilir
  • Siz (ve diğer kişiler) üzerinde çalışırken projeyi açabilirsiniz
  • Uygulamayı paylaşmak kolaydır (QR kodu veya bağlantı yoluyla), tüm .apk veya .ipa dosyasını göndermek zorunda değilsiniz
  • Uygulamayı çalıştırmak için derlemeye gerek yok
  • Bazı temel kütüphaneleri standart bir projeye entegre eder (Push Notifications, Asset Manager, ...)
  • ExpoKit'e çıkarabilir ve bazı Expo özelliklerini kullanarak devam eden yerel kodu entegre edebilirsiniz, ancak hepsini değil
  • Expo .apk ve .ipa dosyaları oluşturabilir (Expo ile mümkün olan mağazalara dağıtım)

Dezavantajları :

  • Yerel modüller ekleyemezsiniz (muhtemelen bazıları için gamechanger)
  • Objective-C / Java'da yerel kod kullanan kitaplıkları kullanamazsınız
  • Standart Hello World uygulaması yaklaşık 25 MB büyüklüğündedir (entegre kütüphaneler nedeniyle)
  • Kullanmak istiyorsanız: FaceDetector, ARKit veya Ödemeler ExpoKit'e çıkarmanız gerekir
  • ExpoKit'e çıkarmanın Expo'nun özelliklerinde bir değiş tokuşu vardır, örneğin QR kodu ile paylaşamazsınız
  • ExpoKit'e çıkarırken, o sırada ExpoKit tarafından desteklenen yerel tepki sürümü ile sınırlısınız
  • ExpoKit'te hata ayıklama (yerel modüller ile) çok daha karmaşıktır, çünkü iki dili ve farklı kütüphaneleri karıştırır (artık resmi Expo desteği yok)

Umarım en önemli noktaları özetleyebilirim. Lütfen ek puan eklemekten çekinmeyin.

Kaynaklar: https://code.tutsplus.com/tutorials/detaching-expo-apps-to-expokit-concepts--cms-30661 https://github.com/react-community/create-react-native-app/ sorunlar / 516 # issuecomment-373629114 https://docs.expo.io/versions/latest/guides/detach.html (genel olarak resmi belgeler)


1
Avantaj ve dezavantajların net bir resmi için @BenjaminHeinke'e teşekkür ederiz. Ben dışarı tepki yerel app için expo benimseme karar ile zaten dezavantaj # 2 yaşıyorum. Bu nedenle Appsee ile entegre olamayız. Bunun için bir çözüm yok mu?
CoolDocMan

2
Cihazın testler için USB'ye bağlı olması gerekmez, sadece ilk derleme ve kurulum USB üzerinden yapılmalıdır. Daha sonra Wi-Fi kullanabilirsiniz! Yerel ayarlarda değişiklik yaparsanız yeniden derleme yapmanız gerekir.
rszalski

30

Brent Vatne'nin cevabı iyi ama bazı detaylar eklemek istiyorum.


Expo, React Native'in API yüzeyini genişletiyor

React Native, kutudan çıkardığınız tüm JS API'lerini değil, yalnızca en temel özellikleri sunar. React Native geliştiricilerin ek yerel kütüphaneleri bağlamak için Android Studio / XCode kullanmaları bekleniyor. Expo, RN'yi geliştirmeyi ve en yaygın ihtiyaçlar için ihtiyacınız olan tüm JS API'sini sağlamayı amaçlamaktadır. Temel olarak, sizin için zaten tek bir lib: Bazen bu kütüphaneler RN dünyasında zaten mevcuttur ve ExpoKit'e entegre edilmiştir.

Expo ekibinin orada her lib'i ExpoKit'e dahil edemeyeceğini (bazı hayal kırıklığı yaratabileceğini) da fark etmek önemlidir, çünkü merhaba dünya uygulaması boyutu büyüyecektir, çünkü kullanılmayacak çok sayıda API gönderecektir çoğu uygulamada.

Expo havadan JS güncellemeleri sağlar

Diğer sistemler (CodePush ...) gibi, Expo da uygulamanızı havadan güncellemek için bir sistem sağlar. Bu, JS paketinizi bir CDN'ye yüklediğiniz anlamına gelir ve mobil uygulamalar yeni JS'yi bir sonraki açılışta otomatik olarak indirir ve kullanır (mağazalardan yayın / inceleme talep etmeden).

Expo, CDN'lerine JS paketlerini yüklemek / yönetmek için bir CLI aracı sağlar. Geliştirme için ayrıca CDN olmayı ve JS paketini localhost üzerinde barındırmayı da seçebilirsiniz. Ve XDE sadece CLI üzerinde görsel bir sargıdır.

Expo genel bir müşteri sunar

Expo istemcisi, Expo ile uyumlu herhangi bir uygulamayı yüklemeye izin veren genel bir istemcidir. Tüm Expo uygulamaları aynı yerel çalışma zamanını (RN + ExpoKit) paylaşır, tek fark onlara verdiğimiz JS'dir. Uygulama mağazalarında yayınladığınız Expo uygulamalarında JS paket URL'nizde kodlanmıştır. Expo istemcisi, bir QRCode tarayarak veya bir url sağlayarak JS'yi hangi url'den yükleyeceğinizi seçebilmeniz için belirli bir şekilde oluşturulur.

Bu istemcinin aynı zamanda JS paketlerini localhost'tan yükleyebileceğini ve geliştirme deneyiminizi kolaylaştırabileceğini unutmayın: XCode veya Android Studio'ya gerek yok ve ilk Hello World'ün telefonda çalışmasını (saatlerden dakikalara) çok daha hızlı hale getiriyor. Aslında Mac olmayan bir iPhone'da geliştirebilirsiniz ve kurulum 2 dakika sürer.

Aslında Expo SDK'sı yükseltilebildiğinden, Expo istemcisi son 5 SDK sürümünü çalıştırabilmesi için bir uyumluluk katmanı içerir.

Expo bir yapı hizmeti sunar

Tüm Expo uygulamaları aynı yerel kodu paylaştığından, Expo bu uygulamaları sizin için kolayca oluşturabilir. Bir bulut oluşturma hizmeti oluşturdular.

Expo tarafından inşa edilen farklı 2 uygulamaların en önemli özelliği, uygulamanın çalıştırmak için JS paketini indirmesi gereken sabit kodlu URL'dir.

Expo sizin için, uygulama simgelerini, yönlerini, izinlerini, api anahtarlarını ayarlamak için bildirici bir yol sağlamak, push bildirimlerini ayarlamanıza yardımcı olmak, profilleri sağlamak için başka şeyler yapar ... birçok ayarın uygulamada derleme sırasında kodlanması gerekir. havadan değiştirilemez.

Expo, Yerel Telefonun Cordova'ya ne olduğu konusunda tepki gösterecek

React Native benzer Cordova. Aynı görünüm teknolojisi değil (yerel veya webview), ancak her ikisi de yerel özellikleri javascript'ten kontrol etmenizi sağlar ve her ikisi de bir eklenti sistemi sunar, böylece geliştiriciler kolayca yeni JS / yerel bağlamalar ekleyebilir.

PhoneGap, Expo'ya benzer. Her ikisi de üzerine inşa edildikleri temel platformun ham API'sini önceden tanımlanmış ek yerel eklentilerle zenginleştirmeye çalışırlar. PhoneGap ayrıca sunan yapım servisine ve sahip jenerik müşteri zamandır onaylı eklentileri kullanabilirsiniz kadar işin söyledi.

Sonuç

Gördüğünüz gibi, Expo bir dizi araç. Sonunda, mobil projelerinizi kolayca geliştirmenize, paylaşmanıza ve mağazalarınızda yayınlamanıza izin verir. PhoneGap deneyimine oldukça benzer (ancak çok daha iyi ve daha az kafa karıştırıcı).

Bu 2 durum haricinde Expo'yu yeni React Native yeşil alan projesi için kesinlikle tavsiye edeceğim:

  • Expo'da bulunmayan ve yakında hiçbir zaman olmayacak API'lara ihtiyacınız olduğunu zaten biliyorsunuz
  • Uygulama boyutunuza çok önem veriyorsunuz (büyük ExpoKit boyutu nedeniyle HelloWorld> 25mb'dir, ancak bundan sonra sadece JS olduğu için çok artmaz)

1
API's Expo'nun desteklemediği bir liste bulmaya çalışıyorum. Bunu nerede bulacağını bilen var mı?
ronnyrr

@ronnyrr Expo, JS olmayan ve ham RN ve ExpoKit'e dahil olmayan her şeyi desteklemez. Expo'nun desteklemediği şeylerin sonsuz bir listesi var, çünkü Expo'nun desteklediği sonlu özellikler listesinde olmayan her şey. Ne istersen var olamaz.
Sebastien Lorber

2
@ronnyrr Bu aradığınız şey olduğunu düşünüyorum: expo.canny.io popülariteye göre sıralayabileceğiniz özellik isteklerinin listesi
Evan Bacon

26

Resmi Expo belgelerinde açıklanmıştır

Expo ve React Native arasındaki fark nedir?

Expo, React Native için Rails gibidir. Sizin için birçok şey ayarlanmıştır, bu yüzden başlamak ve doğru yolda daha hızlıdır.

Expo ile Xcode veya Android Studio'ya ihtiyacınız yok. İstediğiniz metin düzenleyiciyi (Atom, vim, emacs, Sublime, VS Code, ne isterseniz) kullanarak JavaScript yazmanız yeterlidir. Mac, Windows ve Linux'ta XDE (masaüstü yazılımımız) çalıştırabilirsiniz.

İşte Expo'nun hemen işe yaradığı şeylerden bazıları:

İOS ve Android desteği

Expo'da yazılmış uygulamaları hem iOS hem de Android'de kutudan çıkar çıkmaz kullanabilirsiniz. Her biri için ayrı bir oluşturma sürecinden geçmeniz gerekmez. İOS veya Android'de (veya bilgisayarınızdaki bir simülatörde veya emülatörde) App Store'dan Expo Client uygulamasındaki herhangi bir Expo uygulamasını açmanız yeterlidir.

Push bildirimleri

Anlık bildirimler, tek bir birleştirilmiş API kullanarak hem iOS hem de Android'de kutudan çıkar çıkmaz çalışır. APNS ve GCM / FCM kurmanız veya ZeroPush veya bunun gibi bir şeyi yapılandırmanız gerekmez. Bunu şu anda olabildiğince kolay hale getirdiğimizi düşünüyoruz.

Facebook Girişi

Bu, kendiniz düzgün bir şekilde kurmak için uzun zaman alabilir, ancak Expo'da 10 dakika veya daha kısa sürede çalışmasını sağlayabilirsiniz.

Anında Güncelleme

Tüm Expo uygulamaları yalnızca XDE'de Yayınla'yı tıklayarak birkaç saniyede güncellenebilir. Hiçbir şey yapmanız gerekmiyor; sadece bu şekilde çalışır. Expo kullanmıyorsanız, Microsoft Code Push'u kullanır veya bu sorun için kendi çözümünüzü kullanırsınız

Varlık Yönetimi

Resimler, videolar, yazı tipleri vb., Expo ile İnternet üzerinden dinamik olarak dağıtılır. Bu, anında güncelleme ile çalıştıkları ve anında değiştirilebileceği anlamına gelir. Expo'da yerleşik varlık yönetim sistemi, repodaki tüm varlıkları bir CDN'ye yüklemeyle ilgilenir, böylece herkes için hızlı bir şekilde yüklenir.

Expo olmadan yapılacak normal şey, varlıklarınızı uygulamanızda bir araya getirmektir. Bu, onları değiştiremeyeceğiniz anlamına gelir. Veya öğelerinizi bir CDN veya benzeri bir öğeye koymayı yönetmeniz gerekir.

Yeni Tepki Yerel Sürümlerine Daha Kolay Güncelleme

Birkaç haftada bir yeni Expo sürümleri yapıyoruz. İsterseniz React Native'in eski bir sürümünde kalabilir veya uygulamanızın ikili dosyasını yeniden oluşturmak konusunda endişelenmeden yenisine yükseltebilirsiniz. JavaScript'i istediğiniz zaman yeni sürüme geçirme konusunda endişelenebilirsiniz.

Ancak yerel modüller yok…

Expo ile ilgili en sınırlayıcı şey, ExpoKit'i ayırmadan ve kullanmadan kendi yerel modüllerinizi ekleyememenizdir.


2
i Windows 8. expo kullanıyorum nasıl doğrudan cihazımda benim app çalıştırmak böylece QR kodu oluşturmak için.
Prasanna

1
Windows'ta denemedim, ancak herhangi bir sistemde benzer olması gerektiğini düşünüyorum. QR kodu, Expo XDEkonsolda veya exp startkonsol komut çıkışında otomatik olarak oluşturulur .
gumkins

1
$ prasanna Bazen bir QR kodu görmezsiniz, çünkü telefonunuz ve geliştirme makineniz aynı ağda yoktur. Örneğin, evde çalışıyorsanız, telefonunuzun ev ağınızda olduğundan emin olun. Ve vb ...
ccalvert

expo startayrıca yerel ana makinenizde QR koduna erişebileceğiniz bir ip adresi gösterecektir
Jordan Simba

7

EXPO CLI

artıları: -

 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.

Eksileri:-

 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

Yerel Klibi Yanıtla

Artıları: -

 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.

Eksileri:-

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.

İhtiyaçlarınıza göre herhangi bir yaklaşımı tercih edebilirsiniz.


2

Burada, Expo'nun yeni kanca özelliğini kullanmanıza izin vermeyen 16.5 reaksiyonunun eski bir sürümünü kullandığını not edeceğim. Expo ile gitmeye karar verirseniz, sürüm kontrollerinizi izlemeye dikkat edin. Tuhaf hatalar alıyorsanız, say reaktif navigasyonun eski sürümlerinin 16.5 sürümü ile kullanılması gerekecektir.


expo updateExpo tarafından yönetilen paketlerin çoğu için uyumlu sürümleri almak oldukça iyi bir iş çıkarıyor. Şu an itibariyle React Navigation'ı güncellediğini düşünmüyorum, ancak bu kütüphane aslında Expo tarafından destekleniyor. Şahsen, React Navigation ve Expo arasında nadiren uyumluluk sorunları ile karşılaşıyorum (beta sürümlerini kullanırken birkaç sorunla karşılaştım). Ancak, Expo tarafından yönetilmeyen paketlerle ilgili daha fazla uyumluluk sorunu görebilirsiniz.
Christian Juth

2

Fuar ve tepki-doğal-klibin avantajları ve dezavantajları hakkındaki cevaplar eksiksizdir. Kişisel deneyimim olarak başka bir noktaya değinmek istiyorum. Expo, projede varsayılan olarak birçok modül içerir ve onunla çalışmayı kolaylaştırır. Ancak üretim aşamasında büyük bir problem var çünkü inşa edilmiş androidve iosversiyonlar çok büyük bir boyuta sahip. Örnek için bir ile tek bir sayfa varsa dosya boyutu yaklaşık olurdu . Reat-native-cli'da aynı projeye sahip olmak, boyutu olan bir uygulama ile sonuçlanacaktır .'Hello World'apk19 MB6 MB

Şahsen ben ticari bir uygulama geliştirmek istiyorsanız expo kullanmanızı önermiyoruz.


Bunun expo uygulamalarının üretime hazır olmaması için yeterince iyi bir neden olduğunu düşünmüyorum. Ayrıca bu daha önceki cevaplarla ayrıntılı olarak açıklanmıştır
Dawoodjee

1

Expo ile çalışan bir yıldan fazla bir süredir yaşadım Uygulamanın boyutu Expo'yu kullanmanız için önemli değilse, Harita'yı uygulamak kolaydır, React-native'den daha kolay itin, ancak yayınlamak istiyorsanız projenin sonunda Google Play veya başka bir mağazadaki uygulama APK React-native'deki bazı İzinleri kaldırmak için bir zorluğunuz var.Her şeyi değiştirebilirsiniz, ancak push bildirimi veya harita gibi bazı kütüphaneleri içe aktarmak için de bu kütüphaneleri manuel olarak eklemeniz gerekir. android ve iOS projeleri


-1

expo, bir uygulamayı hızlı bir şekilde başlatmanıza yardımcı olmak için React Native etrafında oluşturulmuş bir araç zinciridir. React Native uygulamasının ve arabiriminin ve genellikle üçüncü taraf yerel React Native bileşenlerinde bulunan hizmetlerin geliştirilmesini ve test edilmesini kolaylaştıran bir dizi araç sağlar. Expo ile hepsini Expo SDK'da bulabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.