이전 글에서는 Flutter에서 멀티모듈을 활용해 재사용성을 높인 구조를 만드는 방법에 대해 소개했었다.
이번 글에서는 멀티모듈의 단점인 pubspec.yaml
의 버전 관리가 어려운 점을 손쉽게 해결해주는 melos라는 패키지를 소개하고자 한다.
melos는 invertase.io에서 만든 서드파티 패키지로, Flutter와 관련된 많은 패키지들 중 firebase
, stream_chat
등 굵직한 패키지에서 사용되고 있다.
사용 방법 또한 크게 어렵지 않은데, 우선 메인 프로젝트의 pubspec.yaml
에 melos
를 추가해준다.
dependencies:
melos: ^4.1.0
이후, 아래의 명령을 통해 melos cli명령을 사용할 수 있도록 활성화한다.
dart pub global activate melos
이후 메인 프로젝트의 최상위 경로에 melos.yaml
파일을 생성하고, 다음과 같이 내용을 작성한다.
# 현재 메인 프로젝트의 이름으로 작성
name: my_project_workspace
# 현재 메인 프로젝트의 Dart 버전을 정의한다.
environment:
sdk: '>=3.0.0 <4.0.0'
# 영향을 줄 프로젝트 리스트
packages:
- .
- <path>/<package_name>
# 미리 정의된 명령어의 configuration
command:
bootstrap:
environment:
sdk: ">=3.0.0 <4.0.0"
flutter: ">=3.0.0 <4.0.0"
dependencies:
collection: ^1.18.0
integral_isolates: any
dev_dependencies:
build_runner: ^2.3.3
# 커스텀 명령 작성 - 원하는 명령을 정의할 수 있음.
scripts:
prepare:
run: melos bootstrap && melos run build
exec:
concurrency: 1
analyze:
run: dart analyze .
exec:
concurrency: 5
이 파일에서 가장 많이 쓰일 명령은 아마 bootstrap
명령일 것이다. 아래와 같이 shell에 입력해 실행하준다.
melos bootstrap
이 명령이 실행되면 command
의 bootstrap
에 정의된 설정으로 packages
에 작성해둔 경로에 해당하는 모든 Flutter 프로젝트에 대해 pubspec.yaml내용을 동기화 하고 pub get
명령을 수행한다.
이를 통해 멀티 모듈 환경에서 여러 모듈이 공통적으로 사용하는 서드파티 라이브러리의 버전을 통일할 수 있다.
https://melos.invertase.dev 로 접속하면 공식 문서가 잘 정리되어 있어 좀 더 자세한 내용이 궁금한 사람들의 경우 해당 링크를 통해 자세히 알아볼 수 있다.