naeilcli

Flutter GetX 프로젝트를 위한 강력한 CLI 스캐폴딩 도구입니다. GetX 페이지, 컨트롤러, 바인딩, 라우트를 자동으로 생성하여 개발 생산성을 크게 향상시킵니다.

✨ 주요 기능

  • 자동 파일 생성: GetX 페이지, 컨트롤러, 바인딩, 뷰 파일을 한 번에 생성
  • 라우트 자동 등록: app_pages.dartapp_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에서 더 많은 정보를 확인하세요.

Libraries