UNPKG

create-palladium

Version:

A modern CLI tool to create Vite + React + TypeScript projects with various configurations

50 lines (49 loc) 2.02 kB
import fs from "fs-extra"; import path from "path"; import { TemplateManager } from "./templateManager.js"; import { PackageManager } from "./packageManager.js"; import { GitManager } from "./gitManager.js"; import { logger } from "../utils/logger.js"; export async function createProject(answers) { const targetDir = path.resolve(process.cwd(), answers.projectName); try { // 1) 디렉토리 생성 await fs.ensureDir(targetDir); // 2) 템플릿 관리자 초기화 및 검증 const templateManager = new TemplateManager(targetDir, answers); await templateManager.validateTargetDirectory(); // 3) 템플릿 복사 및 조건부 처리 await templateManager.copyTemplate(); await templateManager.processConditionals(); // 4) 패키지 관리자 초기화 및 커스터마이징 const packageManager = new PackageManager(targetDir, answers); await packageManager.customizePackageJson(); // 5) Git 관리자 초기화 const gitManager = new GitManager(targetDir); await gitManager.createGitignore(); // 6) 의존성 설치 await packageManager.installDependencies(); // 7) Git 초기화 await gitManager.initializeGit(); // 8) 개발 서버 실행 (선택사항) await packageManager.runDevServer(); } catch (error) { // 에러 발생 시 생성된 디렉토리 정리 if (await fs.pathExists(targetDir)) { try { await fs.remove(targetDir); logger.info("에러로 인해 생성된 디렉토리를 정리했습니다."); } catch (cleanupError) { logger.warning("디렉토리 정리 중 오류가 발생했습니다."); } } if (error instanceof Error) { throw error; } else { throw new Error(`알 수 없는 오류가 발생했습니다: ${String(error)}`); } } }