Чим відрізняється Expo від React Native?


204

З веб-сайту Expo

Експо дозволяє веб-розробникам створювати справді власні програми, які працюють на обох iOS та Android, записуючи їх один раз у просто JavaScript.

Хіба це не те, що робить React Native? Яка різниця?

Відповіді:


209

Я працюю на Expo!

Коли ви пишете код, Expoви пишете React Nativeкод. Expoмає дві основні частини:

1) expo-cli: інструмент для розробників для створення проектів, перегляду журналів, відкриття на вашому пристрої, публікації тощо.

2) ExpoКлієнт: додаток на вашому телефоні, що дозволяє вам відкривати свої проекти під час роботи над ними, не потребуючи перегляду XCodeабо Android Studio, а також дозволяє іншим людям також їх переглядати! І якщо ви опублікуєте його через expo-cli, люди можуть отримати доступ до нього в будь-який час через Expoклієнта на Android або на iOS, якщо він увійшов у той самий обліковий запис, з яким він був опублікований. Нарешті, ми також дозволяємо створювати окремі додатки, щоб людям не потрібно було використовувати Expoклієнт, щоб відкрити його, і ви можете розповсюджувати його в магазині додатків та магазині ігор, якщо хочете.

Отже, Expoце набір інструментів, побудованих поверх / навколо React Native. Ці інструменти залежать від однієї ключової віри, яку ми дотримуємось Expo: можливо створити більшість додатків без необхідності писати нативний код, за умови, що у вас є всебічний набір API Javascript.

Це важливо, тому що з React Nativeвами завжди можна перейти до основного коду. Іноді це надзвичайно корисно, але це коштує дорого: потрібно надсилати людям свої бінарні файли, якщо ви хочете, щоб вони перевірили їх, хтось з іншого боку світу не може просто натиснути посилання, щоб відкрити його під час роботи. на ньому, і ви не можете просто опублікувати його одним клацанням, щоб хтось отримав доступ до нього, як у веб-переглядачі.

З Expo, ми вважаємо , що спроба уникнути падіння вниз в машинний код, якщо ви можете. Як я вже згадував вище, ми вважаємо, що для широкого набору API Javascript, для більшості програм це не повинно бути необхідним. Таким чином, ми прагнемо забезпечити цей всебічний набір API, а потім створити все дивовижне інструментарій, який може існувати у світі, де спільний робочий час спільного використання.

Однак якщо ви виявите, що ви повністю переходите на рідну версію, ви можете ExpoKitпродовжувати користуватися нативними API, які Expoнадають вам той самий рівень контролю, як і в будь-якому рідному проекті. " ExpoKit- це бібліотека Objective-C та Java, яка дозволяє використовувати Expoплатформу та існуючий Expoпроект як частину більшого стандартного нативного проекту." Детальніше читайте тут.


5
"За допомогою Exponent ви не можете перейти до власного коду". Приємно знати, що ви НЕ ВІДБАЛИ переходити до рідного коду, але що робити, якщо вам потрібно, чому Exponent заважає вам це робити?
Отто

3
Ах, я бачу, як це було незрозуміло. Таким чином, клієнт Exponent є повністю відкритим кодом ( github.com/exponentjs/exponent ), це означає, що ви можете писати нативний код, якщо вам подобається, але ви фактично просто обробляєте бібліотеки Exponent як колекцію нативних модулів в інакше типовому React Native додаток Це абсолютно добре і було мотиватором для нас відкритим кодом проекту. Це означає, що якщо ви хочете мати можливість використовувати наш інструментарій (програмування бінарних програм, клієнт-експонент у магазині додатків / ігор для обміну тестовими збірками, вбудованими push-повідомленнями тощо), ви не можете писати нативний код.
brentvatne

На момент написання програми Expo вийшов досить непогано інтегруючи корисні плагіни. Однак їм не вистачає ОСНОВНОЇ інтеграції плагінів для IAP, і без цього ви не можете заробити гроші з вашої програми !!! І ви запитаєте, який сенс робити додаток, якщо я не можу отримати прибуток !!
Адам

97

Я спробував зробити короткий опис документації та відповіді від співробітників Expo:

Реагуйте на рідну ініціативу:

Переваги :

  • Ви можете додати нативні модулі, написані на Java / Objective-C (мабуть, єдиний, але найсильніший)

Недоліки :

  • Для запуску проектів потрібні Android Studio і XCode
  • Ви не можете розробляти для iOS, не маючи Mac
  • Пристрій повинен бути підключений через USB, щоб використовувати його для тестування
  • Шрифти потрібно імпортувати вручну в XCode
  • Якщо ви хочете поділитися додатком, вам потрібно надіслати весь файл .apk / .ipa
  • Не надає API JS поза коробкою, наприклад, Push-Notifications, Asset Manager, їх потрібно встановити вручну і пов'язати, наприклад, з npm
  • Налаштування робочого проекту належним чином (конфігурація пристроїв) досить складна і може зайняти час

Експо

Переваги :

  • Налаштування проекту легко і може бути здійснено за лічені хвилини
  • Ви (та інші люди) можете відкрити проект під час роботи над ним
  • Спільний доступ до програми легко (за допомогою QR-коду чи посилання), вам не доведеться надсилати весь файл .apk або .ipa.
  • Не потрібно створювати додаток для запуску програми
  • Інтегрує деякі базові бібліотеки в стандартний проект (Push Notifications, Asset Manager, ...)
  • Ви можете вийняти його з ExpoKit та інтегрувати нативний код, продовжуючи використовувати деякі функції Expo, але не всі
  • Expo може створювати файли .apk та .ipa (можливе розповсюдження в магазинах за допомогою Expo)

Недоліки :

  • Ви не можете додати вбудовані модулі (можливо, для деяких змін)
  • Ви не можете використовувати бібліотеки, які використовують нативний код в Objective-C / Java
  • Стандартний додаток Hello World становить близько 25 Мб (через інтегровані бібліотеки)
  • Якщо ви хочете використовувати: FaceDetector, ARKit або Payments, вам потрібно витягнути його в ExpoKit
  • Якщо вилучити його з ExpoKit, ви знайдете компроміс функцій Expo, наприклад, ви не можете поділитися через QR-код
  • При відхиленні від ExpoKit ви обмежуєтесь реактивною реальною версією, яку підтримує ExpoKit на той момент.
  • Налагодження в ExpoKit (з рідними модулями) набагато складніше, оскільки воно змішує дві мови та різні бібліотеки (офіційної підтримки Expo вже немає)

Сподіваюся, я зміг би підбити найважливіші моменти. Будь ласка, не соромтесь додавати додаткові бали.

Джерела: 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 (офіційна документація загалом)


1
Дякую @BenjaminHeinke за чітку картину переваг та недоліків. Я вже відчуваю недолік №2 з нашим рішенням прийняти експо для нашої програми, що реагує. Через це ми не можемо інтегруватися з Appsee. Хіба для цього немає вирішення?
CoolDocMan

2
Пристрій не потрібно підключати до USB для тестів, лише першу компіляцію та встановлення потрібно робити через USB. Пізніше ви можете користуватися Wi-Fi! Буде потрібна перекомпіляція, якщо ви внесете зміни до рідної мови.
rszalski

30

Відповідь Брента Ватне чудова, але я хотів би додати деякі деталі.


Expo розширює поверхню API React Native

React Native не дає вам усіх необхідних API-кодів JS, а лише більшість примітивних функцій. Очікується, що розробники React Native використовуватимуть Android Studio / XCode для зв’язку додаткових власних бібліотек. Expo має на меті вдосконалити RN та забезпечити всі необхідні API JS для найпоширеніших потреб. Це в основному набір чітко визначених якісних нативних ліфтів, які вже упаковані для вас в один ліб: ExpoKit. Іноді ці бібліотеки насправді вже існують у світі RN та інтегруються в ExpoKit.

Також важливо зауважити, що команда Expo не може включати кожну конфігурацію там у ExpoKit (що може спричинити певні розлади), оскільки розмір привітного світового додатка зростатиме, оскільки він доставлятиме багато API, які не використовуються у більшості програм.

Expo пропонує оновлення JS в прямому ефірі

Як і інші системи (CodePush ...), Expo надає систему для оновлення вашої програми по радіо. Це означає, що ви завантажуєте пакет JS на CDN, і мобільні додатки автоматично завантажують та використовуватимуть новий JS при наступному запуску (не вимагаючи публікації / огляду в магазинах).

Expo пропонує інструмент CLI для завантаження / управління пакетами JS на їх CDN. Для розробки ви також можете стати CDN і розмістити пакет JS на localhost. А XDE - це лише візуальна обгортка CLI.

Експо надає загального клієнта

Клієнт Expo - це загальний клієнт, який дозволяє завантажувати будь-який додаток, сумісний з Expo. Усі програми Expo поділяють той самий власний час виконання (RN + ExpoKit), різниця лише в тому, що ми їм надаємо JS. У додатках Expo, які ви публікуєте в магазинах додатків, в ньому жорстко кодується URL-адреса пакета JS. Клієнт Expo побудований певним чином, щоб ви могли вибрати, з якого URL-адреси завантажувати JS, скануючи QRCode або надаючи URL-адресу.

Зауважте, що цей клієнт також може завантажувати пакети JS з localhost і полегшити ваш досвід розробки: немає потреби в XCode або Android Studio, і він стає набагато швидшим, щоб ваш перший Hello World працював по телефону (від годин до хвилин). На iPhone можна фактично розвиватися без Mac, а налаштування займає 2 хвилини.

Насправді, як пакет SDK Expo можна оновити, клієнт Expo включає рівень сумісності, щоб він міг запускати останні 5 версій SDK.

Експо надає послугу побудови

Оскільки всі програми Expo мають однаковий кодовий код, Expo здатний легко створити ці програми для вас. Вони створили хмарну службу побудови.

Головне, що відрізняє 2 програми, побудовані Expo, - це лише жорсткий код URL, на який додаток повинен завантажити пакет JS для запуску.

Expo робить для вас деякі інші речі, такі як надання декларативного способу настройки значків додатків, орієнтацій, дозволів, клавіш api, допомагає налаштувати натискання сповіщень, надання профілів ... багато налаштувань повинні бути жорстко кодовані під час створення програми в додатку і можуть не можна міняти по повітрю.

Експо - Реагувати Рідних, що Фонегап - Кордова

React Native схожий на Кордову. Це не одна і та сама технологія перегляду (native vs webview), але обидві дозволяють керувати нативними функціями через JavaScript, і обидві пропонують систему плагінів, щоб розробники могли легко додавати нові JS / нативні прив’язки.

PhoneGap схожий на Expo. Вони обидва намагаються збагатити необроблений API базової платформи, на якій вони побудовані, заздалегідь визначеним набором додаткових нативних плагінів. PhoneGap також пропонує послугу побудови та має загального клієнта, який працює до тих пір, поки ви використовуєте затверджені плагіни.

Висновок

Як бачите, Expo - це набір інструментів. Зрештою, це дозволяє легко розробляти, ділитися та публікувати в магазинах ваші мобільні проекти. Він досить схожий на досвід PhoneGap (але набагато кращий і менш заплутаний).

Я остаточно порекомендую Expo для будь-якого нового проекту React Native Greenfield, за винятком цих 2 випадків:

  • Ви вже знаєте, що вам потрібні API, які недоступні в Expo і не будуть незабаром
  • Ви дуже дбаєте про розмір програми (HelloWorld становить> 25 Мб завдяки великому розміру ExpoKit, але після цього він не збільшується сильно, оскільки це просто JS)

1
Я намагаюся знайти список API Expo не підтримує. Хтось знає, де це знайти?
ronnyrr

@ronnyrr Expo не підтримує все, що не є JS і що не входить до сировини RN та ExpoKit. Існує нескінченний перелік речей, які Expo не підтримує, оскільки це все інше, що не входить у кінцевий список функцій, які підтримує Expo. Те, про що ви просите, не може існувати.
Себастьян Лорбер

2
@ronnyrr Я думаю, що це те, що ви шукаєте: expo.canny.io - це список запитів на функції, які можна сортувати за популярністю
Еван Бекон

26

Це пояснюється в офіційній документації Expo

Чим відрізняється Expo від React Native?

Експо такий собі, як Рейки для React Native. Багато речей налаштовано для вас, тож швидше розпочати роботу і на правильному шляху.

З Expo вам не потрібен Xcode або Android Studio. Ви просто пишете JavaScript, використовуючи будь-який текстовий редактор, який вам подобається (Atom, vim, emacs, Sublime, VS Code, що завгодно). Ви можете запустити XDE (наше програмне забезпечення для настільних ПК) на Mac, Windows та Linux.

Ось кілька речей, які Expo дає вам з коробки, які працюють відразу:

Підтримка iOS та Android

Ви можете використовувати програми, написані на Expo, як для iOS, так і для Android прямо з коробки. Вам не потрібно проходити окремий процес збирання для кожного. Просто відкрийте будь-яку програму Expo в додатку Клієнт Expo з App Store на iOS або Android (або в тренажері чи емуляторі на комп’ютері).

Натисніть сповіщення

Натискання сповіщень працює прямо з iOS та Android, використовуючи єдиний об'єднаний API. Вам не потрібно налаштовувати APNS та GCM / FCM чи налаштовувати ZeroPush чи щось подібне. Ми думаємо, що ми зробили це так просто, як це можливо зараз.

Логін Фейсбук

Щоб правильно налаштуватись, це може зайняти багато часу, але ви повинні мати можливість працювати на Expo за 10 хвилин або менше.

Миттєве оновлення

Усі програми Expo можна оновити за лічені секунди, натиснувши Опублікувати в XDE. Вам нічого не потрібно налаштовувати; це просто працює таким чином. Якщо ви не використовуєте Expo, ви або використовуєте Microsoft Code Push, або перекачуйте власне рішення для цієї проблеми

Управління активами

Зображення, відео, шрифти тощо динамічно розподіляються через Інтернет за допомогою Expo. Це означає, що вони працюють з миттєвим оновленням і можуть бути змінені на ходу. Система управління активами, вбудована в Expo, піклується про завантаження всіх активів у вашому РЕПО на CDN, щоб вони швидко завантажувалися для всіх.

Без Expo, звичайне, що потрібно зробити - це зв'язати свої активи у свою програму, а це означає, що ви не можете їх змінити. Або вам доведеться самостійно керувати розміщенням своїх активів на CDN або подібному.

Легше оновлення до нових випусків програми "Реактивне життя"

Ми робимо нові випуски Expo кожні кілька тижнів. Якщо ви хочете, ви можете залишитися на старій версії React Native або перейти на нову, не турбуючись про відновлення бінарного додатка. Ви можете потурбуватися про оновлення JavaScript у свій час.

Але немає рідних модулів ...

Найбільш обмежуючим питанням Expo є те, що ви не можете додавати власні власні модулі, не знімаючи та не використовуючи ExpoKit.


2
Я використовую expo в Windows 8. як генерувати QR-код, щоб безпосередньо запустити додаток на своєму пристрої.
Прасанна

1
Я не пробував цього в Windows, але думаю, що він повинен бути схожим на будь-якій системі. QR-код генерується автоматично або в Expo XDEконсольному, або в exp startконсольному виведенні команди.
gumkins

1
$ prasanna Іноді ви не бачите QR-код, оскільки у вас немає телефону та свого розробника в одній мережі. Наприклад, якщо ви працюєте вдома, переконайтеся, що ваш телефон знаходиться в домашній мережі. І т.
Д

expo startтакож покаже вам ip адресу свого локального господаря, з якого ви можете отримати QR-код від
Jordan Simba

7

EXPO CLI

плюси: -

 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.

Мінуси: -

 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

Реагуйте рідного клієнта

Плюси: -

 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.

Мінуси: -

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.

Ви можете віддати перевагу будь-якому підходу відповідно до ваших вимог.


2

Я зауважу тут, що Expo використовує старішу версію реакції 16.5, яка б заборонила вам використовувати нову функцію гачків. Якщо ви вирішили перейти на Expo, пам’ятайте, що слідкуйте за контролем своєї версії. Старіші версії скажімо, реакція-навігація потребує використання версії 16.5, якщо ви отримуєте дивні помилки.


expo updateробить досить непогану роботу з отримання сумісних версій для більшості пакетів, якими керує Expo. На даний момент я не думаю, що він оновлює React Navigation, але ця бібліотека насправді спонсорується Expo. Особисто я рідко стикаюся з питаннями сумісності між React Navigation та Expo (я думаю, що під час використання бета-версій я стикався з декількома проблемами). Однак ви можете побачити більше проблем сумісності з пакетами, якими не керує Expo.
Крістіан Джут

2

Відповіді про переваги та недоліки expo та react-native-cli є повними. Хочу згадати ще один момент як свій особистий досвід. Expo містить багато модулів за замовчуванням у проекті, і це полегшує роботу з ним. Але це має велику проблему на етапі виробництва, оскільки вбудовані androidта iosверсії мають такі великі розміри. Для прикладу , якщо у вас є одна сторінка з розмір файлу буде приблизно . Якщо такий самий проект буде реагувати на native-cli-cli, це призведе до програми з розміром .'Hello World'apk19 MB6 MB

Тому особисто я не рекомендую використовувати expo, якщо ви хочете розробити комерційний додаток.


Я не думаю, що це достатньо вагома причина, щоб додатки експо не були готові до виробництва. Крім того, це було ґрунтовно пояснено попередніми відповідями
Dawoodjee

1

Я вже більше року працював із експо-версією. Якщо розмір програми не важливий для вас, використовуйте Expo, оскільки це легко реалізувати Map, натисніть простіше, ніж React-native, але в кінці проекту, якщо ви хочете опублікувати додаток в Google Play або іншому магазині, у вас є завдання видалити деякий дозвіл у рідній версії APK React, ви можете змінити все, окрім імпорту певної бібліотеки, наприклад, натискання сповіщень, або карта також потребує певних проблем, оскільки вам потрібно додати ці бібліотеки вручну проекти Android та iOS


-1

expo - це ланцюжок інструментів, створена навколо React Native, яка допоможе вам швидко запустити додаток. Він пропонує набір інструментів, які спрощують розробку та тестування програми та інтерфейсу та сервісів React Native, які зазвичай доступні в сторонніх компонентах React Native. З Expo ви можете їх знайти в SDK Expo.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.