당신이 모를 수도 있는 `create-vite` CLI의 멋진 3가지

발행: (2026년 2월 8일 오후 02:35 GMT+9)
6 분 소요
원문: Dev.to

Source: Dev.to

한눈에 보기

모든 것은 src/index.ts 파일의 init 함수에서 시작됩니다.

CLI는 다음 여섯 단계로 진행됩니다:

  1. 프로젝트 이름과 대상 디렉터리를 가져오거나(묻거나) 입력받습니다.
  2. 디렉터리가 존재하고 비어 있지 않을 경우 이를 처리합니다.
  3. (1단계에서 얻은 프로젝트 이름이 유효한 NPM 패키지 이름이 아닌 경우) 유효한 패키지 이름을 얻습니다.
  4. 사용자에게 프레임워크와 변형을 선택하도록 요청합니다.
  5. 즉시 설치를 원하는지 물어봅니다.
  6. 폴더와 파일을 스캐폴딩합니다.

CLI에 세련된 경험을 제공하는 핵심 라이브러리:

  • mri – CLI 인자를 파싱합니다.
  • @clack/prompts – 매력적인 인터랙티브 프롬프트를 렌더링합니다.
  • picocolors – 콘솔 출력에 색상을 추가합니다.

전체적으로 create‑vite는 직관적이고 간단한 도구이지만, 구현에는 몇 가지 흥미로운 세부 사항이 포함되어 있습니다.

Cool thing 1 – 모든 CLI 플래그

문서에 명시된 --template 플래그 외에도 create‑vite는 여러 가지 플래그를 지원합니다:

플래그설명
--overwrite / --no-overwrite대상 디렉터리가 비어 있지 않을 경우 덮어씁니다.
--immediate / --no-immediate스캐폴딩 후 바로 설치를 실행하고 개발 서버를 시작합니다.
--interactive (-i) / --no-interactive사용자에게 입력을 요청하거나 기본값을 가정합니다. 기본 템플릿은 vanilla‑ts이며, overwriteimmediate는 기본값이 false입니다. 비대화형 모드는 CI/CD 파이프라인이나 AI 에이전트가 명령을 실행할 때 유용합니다.

사용 가능한 템플릿 이름

--template에 다음 문자열 중 하나를 전달할 수 있습니다:

// vanilla
"vanilla-ts",
"vanilla",

// vue
"vue-ts",
"vue",
"custom-create-vue",
"custom-nuxt",
"custom-vike-vue",

// react
"react-ts",
"react-compiler-ts",
"react-swc-ts",
"react",
"react-compiler",
"react-swc",
"rsc",
"custom-react-router",
"custom-tanstack-router-react",
"redwoodsdk-standard",
"custom-vike-react",

// preact
"preact-ts",
"preact",
"custom-create-preact",

// lit
"lit-ts",
"lit",

// svelte
"svelte-ts",
"svelte",
"custom-svelte-kit",

// solid
"solid-ts",
"solid",
"custom-tanstack-router-solid",
"custom-vike-solid",

// ember
"ember-app-ts",
"ember-app",

// qwik
"qwik-ts",
"qwik",
"custom-qwik-city",

// angular
"custom-angular",
"custom-analog",

// marko
"marko-run",

// others
"create-vite-extra",
"create-electron-vite"

멋진 기능 2 – AI 에이전트 “지원”

create‑vite@vercel/detect-agent 를 사용하여 AI 에이전트가 CLI를 호출했는지 확인합니다. 에이전트가 감지되고 인터랙티브 모드가 활성화된 경우, CLI는 비인터랙티브 실행을 제안하는 유용한 메시지를 출력합니다:

create-vite --no-interactive --template <template-name>

멋진 기능 3 – 몇 가지 코딩 기법

npm_config_user_agent 로 패키지 매니저 결정하기

CLI는 npm_config_user_agent 환경 변수를 읽어 사용자가 어떤 패키지 매니저로 실행했는지 추론할 수 있습니다. 예를 들어 pnpm을 사용할 경우 전체 에이전트 문자열을 확인할 수 있습니다:

pnpm config get user-agent
# pnpm/10.20.0 npm/? node/v20.11.1 linux x64

그 후 코드는 이 문자열을 분할해 패키지 매니저 이름을 추출합니다(소스 파일 777번째 줄 구현 참고).

stdin이 TTY인지 감지하기

process.stdin.isTTY는 표준 입력이 터미널에 연결되어 있는지를 CLI에 알려줍니다. 입력이 파이프될 때(예: cat data.txt | xargs pnpm create-vite) isTTYfalse가 되며, 이 경우 인터랙티브 프롬프트가 비활성화됩니다.

Ctrl‑C(취소)를 우아하게 처리하기

각 프롬프트 후에 코드는 사용자가 작업을 취소했는지 확인하고, 취소된 경우 친절한 메시지를 출력하고 정상적으로 종료합니다:

if (prompts.isCancel(projectName)) return cancel();

@clack/prompts 작성자는 이 패턴을 권장하며, 실제 프로덕션 코드베이스에서 이를 보는 것은 그 중요성을 다시 한 번 강조합니다.

0 조회
Back to Blog

관련 글

더 보기 »