본문 바로가기
source-code/React Native

Cannot find module 'expo/bin/cli.js' 에러 해결

by mattew4483 2024. 1. 22.
728x90
반응형

1. 문제 상황

현재 사내 서비스는 react-native로 작성되어 있다.

expo로 프로젝트를 구성한 덕분에,

EAS(Expo Application Services)를 통해 build 및 OTA(over-the-air) 업데이트를 진행하는데...

어느 날부터 eas update시 Cannot find module 'expo/bin/cli.js' 에러가 발생했다.

 

node 환경에서 MODULE_NOT_FOUND 에러가 발생하면 → 열이면 열 패키지가 올바르게 설치되지 않았다는 것!

패키지를 다시 설치하거나,

package.json 파일이 올바른 경로에 위치하는지를 확인하면 된다.

https://stackoverflow.com/questions/64532188/react-native-expo-cli-cant-find-module-expo-js

 

React Native expo-cli can't find module expo.js

internal/modules/cjs/loader.js:895 throw err; ^ Error: Cannot find module 'C:\Users\Jobay\AppData\Roaming\npm\node_modules\expo-cli\bin\expo.js' at Function.Module._resolveFilename (internal/module...

stackoverflow.com

위 에러는 expo 패키지를 찾지 못하는 것이니 yarn add expo를 해주면 될 테다.

부산 엑스포 아님 (깔깔!)

그런데 문제는... 아무리 설치해 봐도 동일한 에러가 발생한다는 것!

✖ Failed to build bundle!
    Error: Cannot find module 'expo/bin/cli.js'
    Require stack:
    - 프로젝트 디렉토리 경로/noop.js
    Code: MODULE_NOT_FOUND

node_modules 폴더를 삭제했다가 다시 설치하기도 해 보고,

아예 global로 설치도 해봤지만... 결과는 모두 실패.

2. 원인 분석

몇 번이고 yarn 명령어를 통해 package.json의 dependencies를 설치했지만 결과는 동일했다.

 

그때쯤 든 의문, 정말로 설치가 안된 건가?

→ 해당 프로젝트에서 yarn list expo 명령어를 입력해 보니...

expo, eas-cli 패키지 자체는 정상적으로 설치되어 있는 모습.

→ 그렇다면 eas update와 같이, eas 명령어를 입력했을 때 실행되는 shell script에서 문제가 발생하겠다!

→ 혹시 eas 빌드 시 구축된 node 환경에서, expo 패키지를 찾지 못하는 건 아닐까???

혹시?

expo 패키지 실행 파일의 경로를 알기 위해, which expo를(mac기준) 입력했더니...

어라라..? nvm의 특정 node version 내에 존재하고 있다.

나의 경우는 16.13.1!

 

그런데 node -v 명령어를 통해 현재 node 버전을 살펴보니...

유레카!

아하!

이전에 개발하던 와중, 서버 코드를 clone 받아 로컬에서 실행한 적이 었었다.

이때, node 최소 버전이 맞지 않아...

https://github.com/nvm-sh/nvm

 

GitHub - nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions

Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions - GitHub - nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active nod...

github.com

nvm을 통해 여러 개의 node 버전을 설치하고 프로젝트별로 각기 다른 node 버전을 사용했는데, 이것이 원인이었던 것!

 

3. 해결 방안

nvm use 16.13.1

eas update --branch release

expo가 설치된 node 버전으로 변경 뒤, eas update를 실행하니...

정상적으로 OTA 업데이트가 완료됨을 확인할 수 있었다!

 

추가적으로...

https://github.com/nodenv/nodenv

 

GitHub - nodenv/nodenv: Manage multiple NodeJS versions.

Manage multiple NodeJS versions. Contribute to nodenv/nodenv development by creating an account on GitHub.

github.com

nodenv를 사용해 프로젝트 별로 각기 다른 node 버전 + 그로 인한 의존성 충돌을 관리할 수도 있다.

→ 시스템 전역 환경과 격리된, 각 프로젝트 별로 필요한 node 버전을 관리할 수 있고

→. node-version 파일을 통해 프로젝트를 공유할 경우 해당 버전을 자동으로 설치할 수도 있다.

728x90
반응형

'source-code > React Native' 카테고리의 다른 글

KeyboardAvoidingView 관련 troubleshooting  (0) 2023.08.16
react-native-webview ↔ web 데이터 송수신  (0) 2023.08.16
React Native TextInput  (0) 2023.08.16
RN _ App Development  (1) 2021.08.02
RN _ Core Components  (3) 2021.07.30