marpple/FxJS

모듈 resolve 과정에서 에러가 있습니다.

Einere opened this issue · 4 comments

현재 RN 프로젝트에서 fxjs2 패키지를 이용중입니다. 개발용으로 앱을 띄우는 과정에서는 별다른 문제가 없지만, APK를 만드는 과정에서 자꾸 모듈 에러가 발생합니다.

// 프로젝트 번들링 명령어
react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
// 디버그 APK 생성 명령어
./gradlew assembleDebug
// 릴리즈 APK 생성 명령어
react-native run-android --variant=release
error Unable to resolve module `../.internal/baseApplyEach.js` from `node_modules/fxjs2/Strict/applyEach.js`: 

None of these files exist:
  * node_modules/fxjs2/.internal/baseApplyEach.js(.native|.android.js|.native.js|.js|.android.json|.native.json|.json|.android.ts|.native.ts|.ts|.android.tsx|.native.tsx|.tsx|.android.svg|.native.svg|.svg)
  * node_modules/fxjs2/.internal/baseApplyEach.js/index(.native|.android.js|.native.js|.js|.android.json|.native.json|.json|.android.ts|.native.ts|.ts|.android.tsx|.native.tsx|.tsx|.android.svg|.native.svg|.svg). Run CLI with --verbose flag for more details.
Error: Unable to resolve module `../.internal/baseApplyEach.js` from `node_modules/fxjs2/Strict/applyEach.js`: 

혹시나 싶어 다음 명령어로 기본 프로젝트를 생성해서 fxjs2 패키지 설치 후 APK를 만들어 봤는데, 위와 같은 에러가 발생했습니다.

npx react-native init AwesomeProject

node_modules/fxjs2 내부를 까보면 실제로 파일이 없는 것도 아니라서 되게 당황스럽네요..

최근에 다양한 Node.js 버전과 commonjs, esm 환경에서 모두 사용할 수 있도록 변경되었고 fxjs 패키지에 적용되어 있습니다. fxjs2는 지원이 종료될(deprecated) 예정입니다. fxjs 패키지도 동일한 문제가 발생하는지 확인해 주시면 감사하겠습니다.

RN 기본 템플릿에서 다음과 같이 트러블 슈팅을 진행했습니다.

  1. 기본 프로젝트 생성
npx react-native init AwesomeProject
  1. fxjs 설치 및 fxjs를 사용하는 코드를 추가

  2. Metro 실행

react-native start
  1. 안드로이드 실행
react-native run-android

이 때는 정상적으로 실행됩니다.

  1. 재부팅 혹은 IDE 껏다 켜기

참고로 저는 맥OS이며, IDE로는 WebStorm을 사용하고 있습니다.

  1. Metro 실행 및 안드로이드 실행

번들링 실패

[Wed Nov 18 2020 13:12:30.905]  BUNDLE  ./index.js 

error: Error: Unable to resolve module `../.internal/baseApplyEach.js` from `node_modules/fxjs/cjs/Strict/applyEach.js`: 

None of these files exist:
  * node_modules/fxjs/cjs/.internal/baseApplyEach.js(.native|.android.js|.native.js|.js|.android.json|.native.json|.json|.android.ts|.native.ts|.ts|.android.tsx|.native.tsx|.tsx|.android.svg|.native.svg|.svg)
  * node_modules/fxjs/cjs/.internal/baseApplyEach.js/index(.native|.android.js|.native.js|.js|.android.json|.native.json|.json|.android.ts|.native.ts|.ts|.android.tsx|.native.tsx|.tsx|.android.svg|.native.svg|.svg)

이렇게 빌드 실패가 뜬 경우, npm 혹은 yarn을 이용해서 fxjs를 제거하고 다시 추가하면 또 정상적으로 실행됩니다.
번들 에러의 원인이 fxjs에 있는지, 혹은 RN에 있는지는 잘 모르겠습니다.. 🤔

facebook/metro#376
Metro bundler에서 '.'으로 시작하는 파일이나 폴더를 잘 읽지 못하는 문제가 있는 것 같네요.
일반 사용자들이 직접 import해서 사용할 일이 없는 함수들을 구분하기 위해 '.internal'이라는 폴더명이 만들어 졌는데요,
react-native에서 이런 이슈가 있다면 폴더명을 변경하도록 하겠습니다. 감사합니다.

v0.18.0 버전에 반영되었습니다.