../.pub-cache/hosted/pub.dev/firebase_messaging_web-3.5.18/lib/src/interop/messaging_interop.dart:18:10:
Error: Type 'PromiseJsImpl' not found.
CI 서버에서 아래 명령어로 플러터 프로젝트를 빌드할 때, 위와 같은 이슈가 지속적으로 발생했습니다. firebase_messaging_web
3.5.18 버전에서 이슈가 발생하는 것 같았으며, 로컬 빌드에서는 문제가 발생하지 않았습니다.
flutter build web --release # 배포용 웹앱 빌드 시 사용
참고로 firebase_messaging_web
은 firebase_messaging
에서 참조하고 있으며, 제가 작업중인 프로젝트는 firebase_messaging
14.9.4 버전을 사용하고 있었습니다.
커맨드로 앱을 빌드할 때 마지막에 -v 옵션을 주고, 빌드 시 출력되는 로그를 확인했습니다. 플러터는 빌드 시 필요한 플러그인들을 .pub-cache/hosted/pub.dev
에서 가져오는데요, 로컬에서 빌드할 때와 CI 서버에서 빌드할 때 가져오는 플러그인의 버전이 서로 달랐습니다.
.pub-cache
- 플러터 또는 다트 프로젝트의 패키지 정보들이 저장되는 폴더로, 프로젝트 빌드 시 빌드 속도를 높이고 불필요한 다운로드를 방지하기 위해 해당 폴더에 캐싱된 패키지들을 재사용하여 빌드합니다.
flutter build web --release -v
[ +1 ms] Found plugin
firebase_messaging at /../../.pub-cache/hosted/pub.dev/firebase_messaging-14.9.4/
[ +1 ms] Found plugin
firebase_messaging_web at /../../.pub-cache/hosted/pub.dev/firebase_messaging_web-3.8.7/
[ +1 ms] Found plugin
firebase_messaging at /../../.pub-cache/hosted/pub.dev/firebase_messaging-14.7.10/
[ ] Found plugin
firebase_messaging_web at /../../.pub-cache/hosted/pub.dev/firebase_messaging_web-3.5.18/
CI 서버에서는 이슈가 발생하고 있는 firebase_messaging_web
3.5.18 버전을 사용하고 있지만, 로컬 빌드에서는 firebase_messaging_web
3.8.7 버전을 사용하고 있었습니다.
pubspec.yml에 정의된 firebase_messaging
의 버전을 로컬 환경에 맞춰 수정하였습니다. 각각의 환경에서 동일한 pubspec.yml을 참조하여 패키지 의존성을 가져올거라고 생각했는데, 아무래도 빌드 환경이 내부적으로 조금 달라서 서로 다른 버전의 플러그인을 사용한 것 같습니다.
firebase_messaging: ^14.9.4
깃허브에 올라온 관련 이슈 - Error: Type 'PromiseJsImpl' not found. #160821