티스토리 뷰
IntelliJ 혹은 Android Studio에서 freezed나 drift 같은 패키지를 쓰면 같은 이름으로 확장자가 다르게 여러 파일이 나온다.
user.dart
user.freezed.dart
user.g.dart
사실 직접 눌러서 볼 일이 거의 없기 때문에, 합쳐서 깔끔하게 보고 싶을 때 쓰는 방법이다.
설정 방법
IntelliJ 혹은 Android Studio에서 만능찾기인 Shift 연속 2번을 누르고 nest를 검색하면 File Nesting...이 나온다.
해당 항목을 선택하여 같은 확장자끼리 묶어주면 하나의 파일로 합쳐져서 나온다.
Parent file suffix: .dart
Child file suffix: .g.dart; .freezed.dart; .config.dart; .gr.dart
이제 하나로 합쳐져서 나오는 탐색기를 볼 수 있다. 부모 파일 왼쪽에 화살표가 생기고, 펼치면 생성된 파일들이 안에 들어 있다.
Dart에서 자주 쓰는 조합
사용하는 패키지에 따라 자식 확장자를 추가하면 된다.
.g.dart— json_serializable, drift, hive 등 build_runner 계열.freezed.dart— freezed.gr.dart— auto_route.config.dart— injectable.mocks.dart— mockito
다른 언어에서도 유용하다
File Nesting은 Dart 전용 기능이 아니다. 기본 제공되는 규칙도 있고 직접 추가할 수도 있다.
.ts←.js,.js.map,.d.ts.vue←.vue.d.ts.java←.class.scss←.css,.css.map
VS Code에서는
VS Code도 같은 기능이 있다. 설정 파일에 직접 넣는다.
// .vscode/settings.json
{
"explorer.fileNesting.enabled": true,
"explorer.fileNesting.expand": false,
"explorer.fileNesting.patterns": {
"*.dart": "${capture}.g.dart, ${capture}.freezed.dart, ${capture}.gr.dart",
"pubspec.yaml": "pubspec.lock, .flutter-plugins, .flutter-plugins-dependencies, .packages",
"*.ts": "${capture}.js, ${capture}.d.ts, ${capture}.js.map"
}
}
이 설정을 .vscode/settings.json에 넣고 커밋하면 팀원 전체가 같은 탐색기 뷰를 쓰게 된다. IntelliJ의 File Nesting 설정은 IDE 전역이라 프로젝트 단위 공유가 안 되는데, 이 점은 VS Code 쪽이 낫다.
덤: 생성 파일은 검색에서도 빼는 게 좋다
탐색기에서 숨기는 것도 좋지만, 전체 검색 결과에 생성 파일이 섞여 나오는 게 더 성가시다. 같은 코드가 두 번씩 잡히기 때문이다.
// VS Code
{
"search.exclude": {
"**/*.g.dart": true,
"**/*.freezed.dart": true
}
}
IntelliJ에서는 해당 파일을 우클릭 → Mark Directory as → Excluded 하거나, Settings > Editor > File Types의 Ignored Files and Folders에 패턴을 추가한다.
생성 파일을 Git에 커밋할 것인가
관련해서 자주 나오는 논쟁이다. 정답은 없고 트레이드오프가 있다.
| 커밋한다 | 커밋 안 한다 |
| 클론 후 바로 빌드 가능 | 저장소가 가볍다 |
| CI에서 생성 단계 불필요 | diff에 노이즈가 없다 |
| diff가 지저분해진다 | CI에 build_runner 단계 필요 |
| 머지 충돌이 잦다 | 클론 후 생성 단계를 잊으면 에러 |
Dart 커뮤니티에서는 커밋하지 않고 CI에서 생성하는 쪽이 더 일반적이다. 다만 팀에 신규 인원이 자주 들어온다면 커밋해두는 편이 온보딩 마찰이 적다.
# .gitignore (커밋 안 하는 경우)
*.g.dart
*.freezed.dart
*.config.dart
# 클론 후 실행
flutter pub get
dart run build_runner build --delete-conflicting-outputs
정리
- Shift 두 번 →
File Nesting으로 생성 파일을 부모 아래로 묶는다 - Dart는
.g.dart,.freezed.dart,.gr.dart,.config.dart - VS Code는
explorer.fileNesting.patterns로 프로젝트 단위 공유 가능 - 탐색기뿐 아니라 검색 결과에서도 제외하면 훨씬 쾌적하다
- 생성 파일 커밋 여부는 팀 상황에 따라. Dart는 보통 커밋 안 한다
'개발 > Dart & Flutter' 카테고리의 다른 글
| Flutter 안드로이드 타겟 SDK 대응하기 (targetSdkVersion 경고) (4) | 2024.07.09 |
|---|---|
| Flutter get_cli 실행 에러 (dart:cli waitFor deprecated) 해결법 (0) | 2024.03.06 |
| Flutter 안드로이드 빌드 전에 해두면 좋은 설정들 (0) | 2023.02.28 |
| Flutter 추천 라이브러리 (0) | 2023.02.17 |
| [라이브러리] Drift (0) | 2023.02.03 |
