Apa perbedaan antara Expo dan React Native?

Jawaban:

206

Saya bekerja di Expo!

Ketika Anda menulis kode dalam ExpoAnda menulis React Nativekode. Expomemiliki dua bagian utama:

1) expo-cli: alat pengembang untuk membuat proyek, melihat log, membuka di perangkat Anda, menerbitkan, dll.

2) ExpoKlien: aplikasi di ponsel Anda yang memungkinkan Anda membuka proyek saat sedang mengerjakannya, tanpa harus melalui XCodeatau Android Studio, dan juga memungkinkan orang lain melihatnya juga! Dan jika Anda menerbitkannya melalui expo-cli, orang dapat mengaksesnya kapan saja melalui Expoklien di Android atau di iOS jika masuk ke akun yang sama dengan yang dipublikasikan. Terakhir, kami juga memungkinkan untuk membangun aplikasi mandiri sehingga orang tidak perlu menggunakan Expoklien untuk membukanya, dan Anda dapat mendistribusikan ke app store dan bermain store jika Anda mau.

Jadi, Expoadalah seperangkat alat yang dibangun di atas / sekitar React Native. Alat-alat ini bergantung pada satu keyakinan utama yang kami pegang Expo: memungkinkan untuk membangun sebagian besar aplikasi tanpa perlu menulis kode asli, asalkan Anda memiliki serangkaian API yang komprehensif Javascript.

Ini penting karena dengan React NativeAnda selalu dapat drop down ke kode asli. Terkadang hal ini sangat membantu tetapi perlu biaya: Anda perlu mengirim orang-orang binari Anda jika Anda ingin mereka mengujinya, seseorang di sisi lain dunia tidak bisa hanya mengetuk tautan untuk membukanya saat Anda sedang bekerja di atasnya dan Anda tidak bisa hanya menerbitkannya dengan satu klik untuk seseorang untuk mengaksesnya mirip dengan yang Anda lakukan di browser.

Dengan Expo, kami sarankan Anda mencoba menghindari menjatuhkan kode asli, jika Anda bisa. Seperti yang saya sebutkan di atas, kami berpikir bahwa dengan set API yang komprehensif tersedia untuk Javascriptini, ini seharusnya tidak diperlukan untuk sebagian besar aplikasi. Jadi, kami bertujuan untuk menyediakan set lengkap API ini, dan kemudian membangun semua tooling mengagumkan yang dapat ada di dunia di mana runtime asli dibagikan.

Namun, jika Anda harus menemukan bahwa Anda benar-benar drop down ke asli, Anda dapat menggunakan ExpoKituntuk terus menggunakan API asli yang Expomemberi Anda sementara memiliki tingkat kontrol yang sama seperti yang Anda lakukan di proyek asli mana pun. " ExpoKitadalah Objective-C dan perpustakaan Java yang memungkinkan Anda untuk menggunakan Expoplatform dan Expoproyek Anda yang ada sebagai bagian dari proyek asli standar yang lebih besar." Baca lebih lanjut di sini.

brentvatne
sumber
4
"Dengan Eksponen, Anda tidak dapat drop down ke kode asli". Sangat menyenangkan mengetahui bahwa Anda tidak HARUS drop down ke kode asli, tetapi bagaimana jika Anda perlu, mengapa Eksponen mencegah Anda melakukannya?
Otto
3
Ah saya bisa melihat bagaimana itu tidak jelas. Jadi klien Exponen benar-benar open source ( github.com/exponentjs/exponent ) yang berarti Anda dapat menulis kode asli jika Anda suka, tetapi kemudian Anda secara efektif hanya memperlakukan pustaka Eksponen sebagai kumpulan modul asli dalam React Native yang khas. aplikasi. Ini benar-benar baik dan merupakan motivator bagi kami untuk membuka sumber proyek. Yang mengatakan, jika Anda ingin dapat menggunakan alat kami (pembangun biner aplikasi, klien eksponen di app / play store untuk berbagi bangunan uji, pemberitahuan push bawaan, dll.) Maka Anda tidak dapat menulis kode asli.
brentvatne
pada saat penulisan, Expo menjadi cukup baik dengan mengintegrasikan plugin asli yang bermanfaat. Namun, mereka tidak memiliki integrasi plugin UTAMA untuk IAP dan tanpa itu, Anda tidak dapat menghasilkan uang dari aplikasi Anda !!! Dan Anda bertanya, apa gunanya membuat aplikasi jika saya tidak bisa mendapat untung !!
Adam
96

Saya mencoba melakukan ringkasan dokumentasi dan jawaban dari karyawan Expo:

Bereaksi Asli:

Keuntungan :

  • Anda dapat menambahkan modul asli yang ditulis dalam Java / Objective-C (mungkin satu-satunya tetapi yang terkuat)

Kekurangan :

  • Membutuhkan Android Studio dan XCode untuk menjalankan proyek
  • Anda tidak dapat mengembangkan untuk iOS tanpa memiliki mac
  • Perangkat harus terhubung melalui USB untuk menggunakannya untuk pengujian
  • Font perlu diimpor secara manual dalam XCode
  • Jika Anda ingin berbagi aplikasi, Anda perlu mengirim seluruh file .apk / .ipa
  • Tidak menyediakan API JS di luar kotak, misalnya Pemberitahuan-Push, Manajer Aset, mereka harus diinstal secara manual dan dihubungkan dengan npm misalnya
  • Menyiapkan proyek yang berfungsi dengan baik (termasuk konfigurasi perangkat) agak rumit dan dapat memakan waktu

Expo

Keuntungan :

  • Menyiapkan proyek mudah dan dapat dilakukan dalam hitungan menit
  • Anda (dan orang lain) dapat membuka proyek saat Anda sedang mengerjakannya
  • Berbagi aplikasi itu mudah (melalui kode-QR atau tautan), Anda tidak perlu mengirim seluruh file .apk atau .ipa
  • Tidak perlu membangun untuk menjalankan aplikasi
  • Mengintegrasikan beberapa perpustakaan dasar dalam proyek standar (Push Notification, Asset Manager, ...)
  • Anda dapat mengeluarkannya ke ExpoKit dan mengintegrasikan kode asli terus menggunakan beberapa fitur Expo, tetapi tidak semuanya
  • Expo dapat membuat file .apk dan .ipa (distribusi ke toko yang memungkinkan dengan Expo)

Kekurangan :

  • Anda tidak dapat menambahkan modul asli (mungkin beberapa gamechanger untuk beberapa)
  • Anda tidak bisa menggunakan pustaka yang menggunakan kode asli di Objective-C / Java
  • Aplikasi Hello World standar sekitar 25MB besar (karena perpustakaan terintegrasi)
  • Jika Anda ingin menggunakan: FaceDetector, ARKit, atau Pembayaran Anda harus mengeluarkannya ke ExpoKit
  • Mengeluarkannya ke ExpoKit memiliki pertukaran fitur Expo, mis. Anda tidak dapat berbagi melalui kode QR
  • Saat mengeluarkan ke ExpoKit Anda terbatas pada versi asli reaksi yang didukung oleh ExpoKit pada saat itu
  • Debugging di ExpoKit (dengan modul asli) jauh lebih rumit, karena menggabungkan dua bahasa dan perpustakaan yang berbeda (tidak ada dukungan Expo resmi lagi)

Saya harap saya bisa merangkum poin-poin terpenting. Silahkan menambahkan poin tambahan.

Sumber: https://code.tutsplus.com/tutorials/detaching-expo-apps-to-expokit-concepts--cms-30661 https://github.com/react-community/create-react-native-app/ issues / 516 # issuecomment-373629114 https://docs.expo.io/versions/latest/guides/detach.html (dokumentasi resmi secara umum)

Benjamin Heinke
sumber
1
Kerugian utama lain dari menggunakan pameran adalah ukuran aplikasi. Ukuran minimum ~ 25 MB untuk aplikasi iOS dan ~ 20 MB untuk aplikasi android
Pratik Singhal
3
Ini sudah disebutkan sebagai kerugian dari proyek pameran: "Aplikasi Hello World standar adalah sekitar 25MB besar (karena perpustakaan terintegrasi)"
Benjamin Heinke
1
Terima kasih @BenjaminHeinke untuk gambaran yang jelas tentang kelebihan dan kekurangan. Saya sudah mengalami kerugian # 2 dengan keputusan kami untuk mengadopsi expo untuk aplikasi asli bereaksi keluar. Kami tidak dapat berintegrasi dengan Appsee karena hal ini. Apakah tidak ada solusi untuk ini?
CoolDocMan
1
Perangkat tidak harus terhubung ke USB untuk pengujian, hanya kompilasi dan instalasi pertama yang harus dilakukan melalui USB. Nanti Anda bisa menggunakan Wi-Fi! Akan membutuhkan kompilasi ulang jika Anda membuat perubahan ke asli.
rszalski
28

Jawaban Brent Vatne baik-baik saja tetapi saya ingin menambahkan beberapa detail.


Expo memperluas permukaan API dari React Native

React Native tidak memberi Anda semua API JS yang Anda butuhkan di luar kotak, tetapi hanya sebagian besar fitur primitif. Pengembang Asli Bereaksi diharapkan menggunakan Android Studio / XCode untuk menautkan pustaka asli tambahan. Expo bertujuan untuk meningkatkan RN dan menyediakan semua API JS yang Anda butuhkan untuk kebutuhan paling umum. Ini pada dasarnya adalah seperangkat lib asli berkualitas yang terdefinisi dengan baik yang telah dikemas untuk Anda dalam lib tunggal: ExpoKit. Kadang-kadang perpustakaan ini sebenarnya sudah ada di dunia RN, dan diintegrasikan ke dalam ExpoKit.

Penting juga untuk memperhatikan bahwa tim Expo tidak dapat memasukkan setiap lib di luar sana ke dalam ExpoKit (yang dapat membuat frustrasi) karena ukuran aplikasi hello world akan bertambah, karena itu akan mengirimkan banyak API yang tidak akan digunakan di sebagian besar aplikasi.

Expo menyediakan pembaruan JS over-the-air

Seperti sistem lain (CodePush ...), Expo menyediakan sistem untuk memperbarui aplikasi Anda melalui udara. Ini berarti Anda mengunggah bundel JS Anda pada CDN dan aplikasi seluler akan secara otomatis mengunduh dan menggunakan JS baru pada startup berikutnya (tanpa meminta publikasi / ulasan dari toko).

Expo menyediakan alat CLI untuk mengunggah / mengelola bundel JS pada CDN mereka. Untuk pengembangan Anda juga dapat memilih untuk menjadi CDN dan meng-host bundel JS di localhost. Dan XDE hanyalah pembungkus visual pada CLI.

Expo menyediakan klien generik

Klien Expo adalah klien generik yang memungkinkan memuat aplikasi apa pun yang kompatibel dengan Expo. Semua aplikasi Expo memang berbagi runtime asli yang sama persis (RN + ExpoKit), satu-satunya perbedaan adalah JS yang kami berikan kepada mereka. Aplikasi Expo yang Anda terbitkan ke toko aplikasi memiliki url bundel JS Anda yang sudah dikodekan. Klien Expo dibuat dengan cara tertentu sehingga Anda dapat memilih dari mana url untuk memuat JS, dengan memindai QRCode atau memberikan url.

Perhatikan bahwa klien ini juga dapat memuat bundel JS dari localhost, dan membuat pengalaman pengembangan Anda lebih mudah: tidak perlu untuk XCode atau Android Studio, dan itu akan jauh lebih cepat untuk menjalankan Hello World pertama Anda di telepon (dari jam ke menit). Anda benar-benar dapat berkembang di iPhone tanpa Mac dan setup membutuhkan waktu 2 menit.

Sebenarnya sebagai SDK Expo dapat ditingkatkan, klien Expo menyertakan lapisan kompatibilitas sehingga dapat menjalankan 5 versi SDK terakhir.

Expo menyediakan layanan pembangunan

Karena semua aplikasi Expo berbagi kode asli yang sama, Expo dapat dengan mudah membangun aplikasi ini untuk Anda. Mereka telah menciptakan layanan cloud build.

Hal utama yang membedakan 2 aplikasi yang dibangun oleh Expo adalah hanya url yang dikodekan untuk aplikasi yang seharusnya mengunduh bundel JS untuk dijalankan.

Expo melakukan beberapa hal lain untuk Anda, seperti memberikan cara deklaratif untuk mengatur ikon aplikasi, orientasi, izin, tombol api, membantu Anda mengatur pemberitahuan push, menyediakan profil ... banyak pengaturan harus di-hardcode pada waktu pembuatan di aplikasi dan dapat dapat diubah melalui udara.

Expo adalah untuk Bereaksi Asli seperti apa Phonegap bagi Cordova

Bereaksi asli adalah Cordova serupa. Ini bukan teknologi tampilan yang sama (asli vs tampilan web) tetapi keduanya memungkinkan Anda untuk mengontrol fitur asli dari javascript, dan keduanya menawarkan sistem plugin sehingga pengembang dapat dengan mudah menambahkan ikatan JS / asli baru.

PhoneGap mirip dengan Expo. Mereka berdua mencoba untuk memperkaya API mentah dari platform yang mendasari mereka dibangun dengan seperangkat plugin asli tambahan yang telah ditetapkan. PhoneGap juga menawarkan layanan build dan memiliki klien generik yang berfungsi selama Anda menggunakan plugin yang disetujui.

Kesimpulan

Seperti yang Anda lihat, Expo adalah seperangkat alat. Pada akhirnya memungkinkan untuk dengan mudah mengembangkan, berbagi, dan menerbitkan ke toko proyek seluler Anda. Ini sangat mirip dengan pengalaman PhoneGap (tapi jauh lebih baik dan kurang membingungkan).

Saya akan merekomendasikan Expo untuk setiap proyek greenfield asli baru React, kecuali 2 kasus ini:

  • Anda sudah tahu bahwa Anda membutuhkan API yang tidak tersedia di Expo dan tidak akan dalam waktu dekat
  • Anda sangat peduli tentang ukuran aplikasi Anda (HelloWorld> 25mb karena ukuran besar ExpoKit, tetapi setelah itu tidak bertambah banyak karena hanya JS)
Sebastien Lorber
sumber
1
Saya mencoba mencari daftar Expo API yang tidak mendukung. Adakah yang tahu di mana menemukan ini?
ronnyrr
@ronnyrr Expo tidak mendukung semua yang bukan JS dan yang tidak termasuk dalam RN dan ExpoKit. Ada banyak hal yang tidak didukung oleh Expo, karena semuanya adalah hal lain yang tidak ada dalam daftar fitur yang didukung Expo. Apa yang Anda minta tidak bisa ada.
Sebastien Lorber
2
@ronnyrr Saya pikir ini yang Anda cari: expo.canny.io ini adalah daftar permintaan fitur yang dapat Anda urutkan berdasarkan popularitas
Evan Bacon
26

Ini dijelaskan dalam dokumentasi resmi Expo

Apa perbedaan antara Expo dan React Native?

Expo adalah sejenis Rails for React Native. Banyak hal telah diatur untuk Anda, jadi lebih cepat untuk memulai dan berada di jalur yang benar.

Dengan Expo, Anda tidak perlu Xcode atau Android Studio. Anda cukup menulis JavaScript menggunakan editor teks apa pun yang Anda sukai (Atom, vim, emacs, Sublime, VS Code, apa pun yang Anda suka). Anda dapat menjalankan XDE (perangkat lunak desktop kami) di Mac, Windows, dan Linux.

Berikut adalah beberapa hal yang diberikan Expo kepada Anda langsung di luar kotak:

Dukungan untuk iOS dan Android

Anda dapat menggunakan aplikasi yang ditulis dalam Expo di iOS dan Android langsung dari kotak. Anda tidak perlu melalui proses pembuatan terpisah untuk masing-masing. Cukup buka aplikasi Expo di aplikasi Expo Client dari App Store di iOS atau Android (atau di simulator atau emulator di komputer Anda).

Pemberitahuan Push

Pemberitahuan push berfungsi langsung di luar kotak di iOS dan Android, menggunakan API tunggal dan terpadu. Anda tidak perlu mengatur APNS dan GCM / FCM atau mengkonfigurasi ZeroPush atau yang seperti itu. Kami pikir kami telah membuatnya semudah mungkin sekarang.

Login Facebook

Ini bisa memakan waktu lama untuk diatur dengan benar, tetapi Anda harus bisa membuatnya bekerja dalam 10 menit atau kurang di Expo.

Pembaruan Instan

Semua aplikasi Expo dapat diperbarui dalam hitungan detik hanya dengan mengklik Terbitkan di XDE. Anda tidak perlu mengatur apa pun; hanya bekerja seperti ini. Jika Anda tidak menggunakan Expo, Anda akan menggunakan Microsoft Code Push atau roll solusi Anda sendiri untuk masalah ini

Manajemen aset

Gambar, video, font, dll. Semua didistribusikan secara dinamis melalui Internet dengan Expo. Ini berarti mereka bekerja dengan pembaruan instan dan dapat diubah dengan cepat. Sistem manajemen aset bawaan untuk Expo menangani mengunggah semua aset dalam repo Anda ke CDN sehingga mereka akan memuat dengan cepat untuk siapa pun.

Tanpa Expo, hal yang biasa dilakukan adalah menggabungkan aset Anda ke dalam aplikasi yang artinya Anda tidak bisa mengubahnya. Atau Anda harus mengelola menempatkan aset Anda di CDN atau sejenisnya sendiri.

Pembaruan Lebih Mudah Untuk Bereaksi Baru Asli Bereaksi

Kami melakukan rilis baru Expo setiap beberapa minggu. Anda dapat tetap menggunakan React Native versi lama jika Anda suka, atau meningkatkan ke versi yang baru, tanpa khawatir membangun kembali biner aplikasi Anda. Anda dapat khawatir tentang meningkatkan JavaScript pada waktu Anda sendiri.

Tapi tidak ada modul asli ...

Hal yang paling membatasi tentang Expo adalah Anda tidak dapat menambahkan modul asli Anda sendiri tanpa melepaskan dan menggunakan ExpoKit.

permen karet
sumber
2
saya menggunakan expo di windows 8. cara membuat kode QR sehingga secara langsung saya menjalankan aplikasi saya di perangkat saya.
Prasanna
1
Saya tidak mencobanya di Windows, tetapi saya pikir itu harus serupa pada sistem apa pun. Kode QR dibuat secara otomatis baik di Expo XDEkonsol atau di exp startoutput perintah konsol.
Gumkins
1
$ prasanna Terkadang Anda tidak melihat kode QR karena Anda tidak memiliki telepon dan mesin pengembangan di jaringan yang sama. Misalnya, jika Anda bekerja di rumah, pastikan telepon Anda ada di jaringan rumah Anda. Dan lain-lain ...
ccalvert
7

CLI EXPO

pro: -

 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.

Kekurangan: -

 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

Bereaksi Asli Cli

Pro: -

 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.

Kekurangan: -

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.

Anda dapat memilih pendekatan apa pun sesuai kebutuhan Anda.

Atul Tiwari
sumber
2

Saya akan membuat catatan di sini bahwa Expo menggunakan versi yang lebih lama dari reaksi 16.5 Yang akan melarang Anda menggunakan fitur kait baru. Jika Anda memutuskan untuk pergi dengan Expo, berhati-hatilah untuk menonton kontrol versi Anda. Versi yang lebih lama dari katakanlah navigasi reaksi perlu digunakan dengan versi 16.5 jika Anda mendapatkan kesalahan aneh.

SMW
sumber
expo updatemelakukan pekerjaan yang cukup baik untuk mendapatkan versi yang kompatibel untuk sebagian besar paket yang dikelola oleh Expo. Sampai sekarang, saya tidak berpikir itu memperbarui Navigasi Bereaksi, tetapi perpustakaan itu sebenarnya disponsori oleh Expo. Secara pribadi, saya jarang mengalami masalah kompatibilitas antara React Navigation dan Expo (saya pikir saya mengalami beberapa masalah saat menggunakan versi beta). Namun, Anda mungkin melihat lebih banyak masalah kompatibilitas dengan paket yang tidak dikelola oleh Expo.
Christian Juth
2

Jawaban tentang kelebihan dan kekurangan dari expo dan reaksi-pribumi-cli lengkap. Saya ingin menyebutkan poin lain sebagai pengalaman pribadi saya. Expo berisi banyak modul secara default di proyek dan membuatnya lebih mudah untuk bekerja dengannya. Tetapi memiliki masalah besar pada fase produksi karena versi yang dibangun androiddan iosmemiliki ukuran yang besar. Misalnya jika Anda memiliki satu halaman dengan 'Hello World'satu apkukuran file akan menjadi sekitar 19 MB. Memiliki proyek yang sama di react-native-cli akan menghasilkan aplikasi dengan ukuran 6 MB.

Jadi secara pribadi saya tidak merekomendasikan menggunakan expo jika Anda ingin mengembangkan aplikasi komersial.

Meisam Nazari
sumber
Saya rasa ini bukan alasan yang cukup bagus untuk aplikasi expo agar tidak siap berproduksi. Selain itu, hal ini telah dijelaskan dengan seksama oleh jawaban sebelumnya
Dawoodjee
1

Saya sudah berpengalaman lebih dari setahun yang bekerja dengan expo. Jika Ukuran aplikasi tidak penting bagi Anda menggunakan Expo karena itu mudah untuk mengimplementasikan Peta, Dorong lebih mudah daripada Bereaksi-asli tetapi pada akhir proyek jika Anda ingin menerbitkan aplikasi di Google Play atau toko lain Anda memiliki tantangan untuk menghapus beberapa Izin di APK asli Anda, Anda dapat mengubah segalanya tetapi untuk mengimpor beberapa perpustakaan seperti pemberitahuan push atau peta memerlukan beberapa tantangan juga karena Anda harus menambahkan perpustakaan ini secara manual ke proyek android dan iOS

Amir Ardalan
sumber
-1

expo adalah toolchain yang dibangun di sekitar React Native untuk membantu Anda memulai aplikasi dengan cepat. Ini menyediakan seperangkat alat yang menyederhanakan pengembangan dan pengujian aplikasi dan antarmuka serta layanan React Native yang biasanya tersedia dalam komponen asli asli React Native pihak ketiga. Dengan Expo, Anda dapat menemukan semuanya di Expo SDK.

Shivo'ham 0
sumber