create-palladium
Version:
A modern CLI tool to create Vite + React + TypeScript projects with various configurations
50 lines (49 loc) • 2.02 kB
JavaScript
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)}`);
}
}
}