[RN][Expo] react native eject 가이드

robert lee·2024년 9월 11일

RN

목록 보기
1/1

Expo는 두가지의 프로젝트 관리가 있다.
두 설정의 차이와 세팅법이 워낙 expo의 잦은 업데이트로 한국인 입장에서는 더더욱 혼돈이 올때가 있다.

managed -> JS 기반으로만 프로젝트 개발시의 명칭

bare workflow -> ios, android 폴더를 커스터마이징하여 Native 기능을 조작할떄의 명칭

간단하게 위와 같은 개념으로만 먼저 알아두고, 두가지의 차이점을 분석을 잘 해주신 링크가 있다.


초기의 RN의 Native Package 연결이 복잡했던 시절이 아니고,
이제는 Linking이 Command 상에서 많이 해결이 되었기에,
Bare을 선택하는 프로젝트가 많습니다.

또한 Managed로만 프로젝트를 구성하면, 워낙 프로젝트의 한계와 Web을 사용하는 수준으로 보이기에, Mobile Native 기능을 전격 활용하기엔 Bare 프로젝트는 핵심요소라고는 생각합니다.


일단 최초 세팅을 npx create-expo-app@latest 로 하게 되면 기본적인 프로젝트는 managed 상태이다.

bare 프로젝트로 가는 과정이 매번 헷갈리기에 작성.

확인해보니 크게 3가지정도의 커맨드가 존재 했던거같습니다.

Expo CLI (Local) - 최신

현재 최신 51 SDK에서 사용 중인 CLI (필자의 버전은 0.18.29 npx expo -v)

웬만한 개발 작업은 해당 커맨드에서 시작한다고 보면 됌.

Commands
  start, export
  run:ios, run:android, prebuild
  install, customize, config
  login, logout, whoami, register

관련링크

bare workflow 커맨드는 npx expo prebuild이다.

prebuild는 네이티브를 컴파일 하기 위해서,
사전에 네이티브 소스 코드를 생성하는 절차이다.

Expo Prebuild 문서가 있으니 확인해봐야 할것 같다.

일단 첫 결론은,
npx expo prebuildexpo eject의 두가지의 커맨드로 혼동이 왔다고 볼수 있다.

SDK 46부터 대대적인 개혁을 한것같은데, npx expo랑 expo 커맨드가 같은게 아니고 다른 것이다. 커맨드 명이 같으니 뭐 초면인 사람에겐 헷갈릴수밖에..

구버전을 global이라 칭한것은 npx가 없이 단독 global execute 되기때문에 칭한듯.

Expo CLI Global - SDK 46이하(?) : 구버전(lagacy)

아마 구버전에서는 하단 커맨드로 bare 처리를 했을것이다.
expo eject
해당 커맨드 입력 시, ios와 android 폴더가 생성 됌.

비고: lagacy cli는 Node 17이상은 지원안한다함.
관련링크

react-native (expo 미사용)

react-native init
상단 커맨드 입력 시에 ios와 android 폴더가 생성.
순수 RN-CLI 사용시의 커맨드.

EAS (Expo Application Services)

이것은 expo project로 만든 결과물의 빌드, 배포, 형상관리 여러 작업을 맡는 CLI이다.
expo가 EAS를 런칭하고나서 본격적으로 돈 버는 사업에 뛰어들었다.
근데 꽤 잘 만듬.


최종결론은 npx expo prebuild 을 사용해서 bare workflow를 구성하자.
https://docs.expo.dev/workflow/prebuild/

위 링크에서 자세한 설정법을 알 수 있다.
expo 개발 할거면, 공식문서 꼼꼼히 읽는건 필수..!
![]

0개의 댓글