Kodėl Expo tapo populiaria React Native kūrėjų pasirinkimu
Kai pradedi kurti mobilią aplikaciją su React Native, pirmiausia susiduri su nemažu iššūkiu – reikia sukonfigūruoti Xcode, Android Studio, nustatyti visus SDK, tvarkytis su sertifikatais ir kitomis techninėmis smulkmenomis. Čia ir ateina į pagalbą Expo – įrankių rinkinys, kuris leidžia pradėti kurti aplikacijas iš karto, be viso to techninio cirko.
Expo iš esmės yra platforma, kuri apgaubia React Native papildomomis funkcijomis ir įrankiais. Galima sakyti, kad tai tarsi „React Native su steroidais”, tik be neigiamų poveikių. Platformą sukūrė komanda, kuri norėjo supaprastinti mobilių aplikacijų kūrimą, ir reikia pripažinti – jiems tai pavyko geriau nei daugeliui kitų.
Kas įdomiausia, Expo leidžia kurti aplikacijas net neturint Mac kompiuterio iOS kūrimui. Tai skamba beveik kaip magija, bet realybėje veikia puikiai. Expo serveriai atlieka sunkiausią darbą už tave, o tu gali susikoncentruoti į tai, kas iš tiesų svarbu – aplikacijos logiką ir dizainą.
Kaip pradėti dirbti su Expo per kelias minutes
Pamiršk sudėtingas instrukcijas, kurios tęsiasi kelias valandas. Su Expo galima pradėti dirbti tikrai greitai. Pirmas žingsnis – įsidiegti Expo CLI. Atidari terminalą ir įveди:
npm install -g expo-cli
Arba jei naudoji yarn:
yarn global add expo-cli
Po to sukuri naują projektą viena komanda:
expo init mano-aplikacija
Sistema paklaus, kokį šabloną nori naudoti. Pradedantiesiems rekomenduočiau pasirinkti „blank” – tai tuščias projektas su minimalia struktūra. Yra ir „blank (TypeScript)” variantas, jei nori nuo pat pradžių naudoti TypeScript, o tai, beje, yra gera praktika.
Kai projektas sukurtas, įeini į jo katalogą ir paleidi:
cd mano-aplikacija
expo start
Ir viskas! Tavo naršyklėje atsidaro Expo Developer Tools, o terminale matai QR kodą. Dabar parsisiunti Expo Go aplikaciją į savo telefoną (yra ir iOS, ir Android versijos), nuskenuoji tą QR kodą, ir tavo aplikacija jau veikia telefone. Nereikia jokių kabelių, kompiliavimo ar laukimo – tiesiog veikia.
Kas slepiasi po Expo gaubtu
Expo nėra kažkokia atskira technologija – tai React Native su kruopščiai parinktais papildiniais ir įrankiais. Pagrindinė Expo vertė slypi trijose srityse: greitas startas, integruotos bibliotekos ir paprastas build procesas.
Pirmiausia, Expo turi didžiulę integruotų API kolekciją. Nori pasiekti kamerą? expo-camera. Reikia geolokacijos? expo-location. Norint dirbti su vietinėmis notifikacijomis? expo-notifications. Visa tai jau yra paruošta ir testuota, nereikia ieškoti trečiųjų šalių bibliotekų ir tikėtis, kad jos veiks.
Antra, Expo turi savo build sistemą – EAS (Expo Application Services). Tai reiškia, kad gali sukurti production-ready .apk ar .ipa failus nenaudodamas savo kompiuterio. Viskas vyksta debesyje. Tiesa, už EAS build paslaugas reikia mokėti, bet yra ir nemokamas planas, kuris pradedantiesiems daugiau nei pakankamas.
Trečia, Expo turi OTA (Over-The-Air) atnaujinimus. Tai reiškia, kad kai pataisai bagą arba pridedi nedidelę funkciją, vartotojai gauna atnaujinimą iš karto, be App Store ar Google Play patvirtinimo proceso. Žinoma, tai veikia tik JavaScript kodo pakeitimams – jei keiti native kodą, vis tiek reikės pereiti per store’us.
Managed vs Bare workflow – ką pasirinkti
Expo siūlo du darbo būdus, ir tai dažnai kelia painiavą naujiems kūrėjams. Managed workflow reiškia, kad Expo kontroliuoja visą native kodą už tave. Tu dirbi tik su JavaScript/TypeScript ir naudoji Expo API. Tai paprasčiausias variantas, ir daugumai projektų jo pakanka.
Bare workflow yra tada, kai nori daugiau kontrolės. Gali pridėti custom native modulius, modifikuoti native kodą, naudoti bet kokias React Native bibliotekas, net jei jos nėra Expo ekosistemoje. Bet tada prarandi kai kuriuos Expo privalumus – pavyzdžiui, nebegali naudoti Expo Go aplikacijos testavimui, reikės kurti development builds.
Gera žinia ta, kad galima pradėti su managed workflow, o vėliau, jei reikia, pereiti prie bare. Komanda expo eject (dabar vadinama expo prebuild) sugeneruoja visus native failus, ir tu gauni pilną kontrolę. Bet prieš tai gerai pagalvok – dažniausiai managed workflow pakanka, o ejection procesas yra vienkryptis.
Aš asmeniškai rekomenduoju pradėti su managed workflow ir ejektinti tik tada, kai tikrai susiduriate su konkrečiu apribojimu. Dažnai kūrėjai mano, kad jiems reikės custom native funkcionalumo, bet realybėje Expo API ir config plugins padengia 90% poreikių.
Config plugins – galios raktas be ejection
Vienas iš naujausių ir galingiausių Expo papildinių yra config plugins sistema. Tai leidžia modifikuoti native projektą be ejection proceso. Pavyzdžiui, nori pakeisti app ikoniuką ar splash screen? Tiesiog redaguoji app.json failą:
{
"expo": {
"name": "Mano App",
"icon": "./assets/icon.png",
"splash": {
"image": "./assets/splash.png",
"backgroundColor": "#ffffff"
}
}
}
Bet config plugins gali daug daugiau. Reikia pridėti custom font’ų? Pakeisti iOS permissions tekstus? Modifikuoti AndroidManifest.xml? Visa tai daroma per config plugins, kurie automatiškai pritaiko pakeitimus native projektui build metu.
Daugelis populiarių bibliotekų jau turi savo Expo config plugins. Pavyzdžiui, jei nori naudoti React Native Firebase, tiesiog įdiegiate biblioteką ir pridedatė plugin’ą į app.json. Jokio rankinio native kodo redagavimo.
Tai iš esmės keičia žaidimą. Anksčiau, jei reikėjo kažko specifinio, turėjai ejektinti projektą. Dabar daugumą dalykų gali padaryti su config plugins ir likti managed workflow’e, kas reiškia paprastesnį palaikymą ir greitesnius atnaujinimus.
EAS Build ir kaip išvengti build skausmų
Tradiciškai, norint sukurti iOS aplikaciją, reikėjo Mac kompiuterio, Xcode, developer account, sertifikatų, provisioning profiles… galvos skausmas garantuotas. Android buvo šiek tiek paprastesnis, bet vis tiek reikėjo konfigūruoti daug dalykų.
EAS Build viską supaprastina. Tai debesų paslauga, kuri sukuria tavo aplikacijos build’us. Pirma, įdiegiate EAS CLI:
npm install -g eas-cli
Tada prisijungiate prie Expo account:
eas login
Ir sukonfigūruojate projektą:
eas build:configure
Ši komanda sukuria eas.json failą su build konfigūracija. Čia gali nurodyti skirtingus build profilius – development, preview, production. Pavyzdžiui:
{
"build": {
"development": {
"developmentClient": true,
"distribution": "internal"
},
"preview": {
"distribution": "internal"
},
"production": {}
}
}
Kai nori sukurti Android build’ą:
eas build --platform android
O iOS:
eas build --platform ios
Sistema automatiškai generuoja reikalingus sertifikatus (jei dar jų neturi), užsiunčia kodą į debesis, sukompiliuoja ir po 10-20 minučių gauni nuorodą parsisiųsti .apk ar .ipa failą. Jokio Xcode, jokių kabelių, jokio streso.
Tiesa, nemokamas planas turi limitų – galima daryti ribotą skaičių build’ų per mėnesį. Bet pradedantiesiems to pakanka, o jei projektas rimtas, mokama versija tikrai verta savo kainos.
Realūs Expo apribojimai ir kaip su jais gyventi
Būkime sąžiningi – Expo nėra tobulas. Yra situacijų, kai jis nebus geriausias pasirinkimas. Pirmiausia, aplikacijos dydis. Expo aplikacijos paprastai yra didesnės nei „bare” React Native aplikacijos, nes įtraukia visas Expo SDK bibliotekas, net jei jų nenaudoji. Tai gali būti 30-50 MB papildomo svorio.
Antra, jei tavo aplikacija reikalauja labai specifinių native funkcijų, kurių nėra Expo SDK, turėsi arba ieškoti config plugin’ų, arba ejektinti projektą. Pavyzdžiui, jei nori integruoti labai specifinę Bluetooth biblioteką ar dirbti su custom hardware, Expo gali būti per ribotas.
Trečia, performance. Nors Expo komanda nuolat optimizuoja platformą, kai kuriose situacijose bare React Native projektas gali veikti šiek tiek greičiau, nes neturi Expo overhead’o. Bet reikia pabrėžti – daugumoje atvejų skirtumas nėra pastebimas.
Ketvirta, priklausomybė nuo Expo ekosistemos. Jei Expo nuspręstų keisti kainodarą ar verslo modelį, tai galėtų paveikti tavo projektą. Bet kol kas Expo komanda rodo gerą kryptį ir aktyviai palaiko bendruomenę.
Vis dėlto, daugumai projektų – ypač startup’ams, MVP, vidiniams įmonių aplikacijoms – šie apribojimai nėra kritiniai. Expo privalumai (greitis, paprastumas, mažesni palaikymo kaštai) dažniausiai persveria trūkumus.
Praktiniai patarimai iš tranšėjų
Dirbdamas su Expo jau keletą metų, susidūriau su įvairiais iššūkiais ir išmokau kelių gudrybių. Pirma, visada naudok TypeScript. Expo puikiai palaiko TypeScript, ir tai sutaupo begalę laiko debuginant. Tiesiog pasirink TypeScript šabloną kurdamas projektą.
Antra, naudok Expo SDK versijas atidžiai. Expo leidžia naujas SDK versijas kas kelis mėnesius, ir jos ne visada yra atgal suderinamos. Prieš atnaujindamas, perskaityk changelog’ą ir testuok gerai. Aš paprastai laukiu bent savaitę po naujos versijos išleidimo, kad bendruomenė surastų pagrindinius bagus.
Trečia, išnaudok Expo Snack – tai online playground, kur gali testuoti kodo fragmentus be projekto kūrimo. Puiki vieta eksperimentuoti su naujomis bibliotekomis ar mokytis. Tiesiog eini į snack.expo.dev ir pradedi rašyti kodą.
Ketvirta, jei kuri komercinį projektą, investuok į mokamą EAS planą anksčiau nei vėliau. Unlimited build’ai, prioritetinė parama ir papildomos funkcijos tikrai vertos. Nemokamas planas geras mokytis, bet production aplikacijai reikia daugiau.
Penkta, naudok EAS Update vietoj klasikinių OTA atnaujinimų. Tai naujesnis ir patikimesnis būdas. Leidžia kurti skirtingus update kanalus (production, staging, beta), rollback’us ir daug daugiau. Konfigūruojama per eas.json ir veikia puikiai.
Šešta, nevenk ejection, jei tikrai reikia. Kai kurie kūrėjai bijo ejektinti projektą, manydami, kad tai katastrofa. Realybėje tai tiesiog kitas darbo būdas. Vis dar gali naudoti Expo bibliotekas ir įrankius, tik gauni daugiau kontrolės. Bet pakartosiu – daugumoje atvejų managed workflow pakanka.
Ateitis atrodo šviesi
Expo ekosistema auga sparčiai. Komanda nuolat prideda naujas funkcijas, gerina performance, plečia SDK. Neseniai pristatė EAS Metadata – įrankį, kuris leidžia valdyti App Store ir Google Play metadata iš kodo, be rankinio redagavimo konsolėse. Tai sutaupo daug laiko, ypač kai turi kelias aplikacijas ar lokalizacijas.
Kitas didelis žingsnis – Expo Router, naujas navigacijos sprendimas, paremtas file-based routing (kaip Next.js). Tai keičia, kaip galvojame apie navigaciją React Native aplikacijose. Vietoj sudėtingų navigacijos konfigūracijų, tiesiog kuri failus atitinkamose direktorijose, ir routing’as generuojamas automatiškai.
Taip pat matome geresnę integraciją su moderniais įrankiais – Expo dabar puikiai veikia su Turborepo monorepo setup’ais, palaiko React Server Components eksperimentus, ir bendradarbiauja su React Native komanda dėl New Architecture palaikymo.
Jei tik pradedate mobilių aplikacijų kūrimo kelionę arba ieškote būdo greičiau pristatyti MVP, Expo yra puikus pasirinkimas. Taip, yra apribojimų, bet privalumai – ypač pradžioje – yra milžiniški. Galite susikoncentruoti į produkto kūrimą, o ne į build konfigūracijas ir native kodo debuginimą. O kai projektas išaugs ir reikės daugiau kontrolės, visada galite pereiti prie bare workflow arba net visiškai native sprendimo. Bet dauguma projektų to niekada neprireikia – Expo managed workflow pakanka net dideliems, sėkmingiems produktams. Tad kodėl nepabandyti? Įdiekite Expo CLI ir per 10 minučių turėsite veikiančią aplikaciją savo telefone. Tai geriausias būdas suprasti, ar Expo tinka jūsų poreikiams.
