naeilcli
Flutter GetX 프로젝트를 위한 강력한 CLI 스캐폴딩 도구입니다. GetX 페이지, 컨트롤러, 바인딩, 라우트를 자동으로 생성하여 개발 생산성을 크게 향상시킵니다.
✨ 주요 기능
- 자동 파일 생성: GetX 페이지, 컨트롤러, 바인딩, 뷰 파일을 한 번에 생성
- 라우트 자동 등록:
app_pages.dart와app_routes.dart에 자동으로 라우트 등록 - 커스터마이징: 모듈 디렉토리, 라우트 파일 경로, 라우트 경로 등을 자유롭게 설정
- 안전한 생성: 기존 파일 덮어쓰기 방지 (force 옵션으로 강제 덮어쓰기 가능)
- 한국어 지원: 모든 메시지와 도움말이 한국어로 제공
🚀 설치
dart pub global activate naeilcli
📖 사용법
기본 사용법
# 새 모듈 생성
naeilcli make home
# 또는 naeilmake 명령어로 직접 실행
naeilmake home
옵션
naeilcli make <모듈명> [옵션]
옵션:
-h, --help 도움말을 출력합니다.
-f, --force 이미 존재하는 파일을 덮어씁니다.
--app app 폴더 구조 (lib/app/...)에 모듈을 생성합니다.
--web web 폴더 구조 (lib/web/...)에 모듈을 생성합니다.
--modules-dir 생성된 기능 폴더가 생성될 디렉토리입니다. (기본값: lib/app/pages)
--routes-file GetPage 항목이 추가될 라우트 정의 파일입니다. (기본값: lib/app/routes/app_pages.dart)
--routes-part Routes와 _Paths 상수가 저장되는 part 파일입니다. (기본값: lib/app/routes/app_routes.dart)
--path 커스텀 라우트 경로. 기본값은 /<name>(param-case) 입니다.
참고:
--app과--web옵션은 동시에 사용할 수 없습니다.
사용 예시
# 기본 홈 모듈 생성 (app 폴더 구조)
naeilcli make home
# app 폴더 구조로 명시적 생성
naeilcli make home --app
# web 폴더 구조로 모듈 생성
naeilcli make home --web
# 커스텀 경로로 모듈 생성
naeilcli make user-profile --path /profile
# web 폴더 구조에서 커스텀 경로로 생성
naeilcli make user-profile --web --path /profile
# 커스텀 디렉토리에 모듈 생성
naeilcli make settings --modules-dir lib/features
# 기존 파일 덮어쓰기
naeilcli make dashboard --force
# app 폴더 구조에서 기존 파일 덮어쓰기
naeilcli make dashboard --app --force
📁 생성되는 파일 구조
App 폴더 구조 (기본값 또는 --app 옵션)
lib/app/pages/
└── home/ # 모듈명 (snake_case)
├── controllers/
│ └── home_controller.dart
├── bindings/
│ └── home_binding.dart
└── views/
└── home_view.dart
Web 폴더 구조 (--web 옵션)
lib/web/pages/
└── home/ # 모듈명 (snake_case)
├── controllers/
│ └── home_controller.dart
├── bindings/
│ └── home_binding.dart
└── views/
└── home_view.dart
🔧 생성되는 파일 내용
Controller (home_controller.dart)
import 'package:get/get.dart';
class HomeController extends GetxController {
// TODO: HomeController 구현
}
Binding (home_binding.dart)
import 'package:get/get.dart';
import '../controllers/home_controller.dart';
class HomeBinding extends Bindings {
@override
void dependencies() {
Get.lazyPut<HomeController>(() => HomeController());
}
}
View (home_view.dart)
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../controllers/home_controller.dart';
class HomeView extends GetView<HomeController> {
const HomeView({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('HomeView'),
centerTitle: true,
),
body: const Center(
child: Text(
'HomeView 동작 중',
style: TextStyle(fontSize: 20),
),
),
);
}
}
🛠️ 라우트 파일 설정
이 도구는 다음 마커를 사용하여 파일에 자동으로 코드를 삽입합니다:
App 폴더 구조의 라우트 파일
app_pages.dart (lib/app/routes/app_pages.dart)
import 'package:get/get.dart';
part 'app_routes.dart';
// NAEILMAKE: import
class AppPages {
AppPages._();
static final routes = <GetPage<dynamic>>[
// NAEILMAKE: routes
];
}
app_routes.dart (lib/app/routes/app_routes.dart)
part of 'app_pages.dart';
abstract class Routes {
Routes._();
// NAEILMAKE: route-constants
}
abstract class _Paths {
_Paths._();
// NAEILMAKE: path-constants
}
Web 폴더 구조의 라우트 파일
app_pages.dart (lib/web/routes/app_pages.dart)
import 'package:get/get.dart';
part 'app_routes.dart';
// NAEILMAKE: import
class AppPages {
AppPages._();
static final routes = <GetPage<dynamic>>[
// NAEILMAKE: routes
];
}
app_routes.dart (lib/web/routes/app_routes.dart)
part of 'app_pages.dart';
abstract class Routes {
Routes._();
// NAEILMAKE: route-constants
}
abstract class _Paths {
_Paths._();
// NAEILMAKE: path-constants
}
📋 요구사항
- Dart SDK: ^3.7.0
- Flutter: >=1.17.0
- GetX 패키지 (프로젝트에 설치 필요)
📄 라이선스
이 프로젝트는 MIT 라이선스 하에 배포됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.
👨💻 개발자
naeileun.dev에서 더 많은 정보를 확인하세요.