Vite, Vitest, ESLint, Prettier — 이제 vp 하나면 끝난다
![]()
프로젝트 하나 셋업하는 데 `package.json`의 `devDependencies`가 20줄을 넘어가본 적 있잖아요. Vite, Vitest, ESLint, Prettier, 거기에 Node.js 버전 관리자랑 패키지 매니저까지. 설정 파일만 해도 `vite.config.ts`, `vitest.config.ts`, `.eslintrc.js`, `.prettierrc` — 프로젝트 루트가 점(dot) 파일 전시장이 되는 경험, 다들 한 번쯤 해보셨을 거예요.
2026년 3월, Vite 창시자 Evan You가 이끄는 VoidZero가 여기에 대한 답을 내놨어요. Vite+. `vp`라는 단일 CLI 하나로 개발 서버, 빌드, 테스트, 린팅, 포맷팅을 전부 처리하겠다는 거죠.
설정 파일 지옥이 사라지는 순간

기존 자바스크립트 생태계에서 가장 짜증났던 건 도구마다 설정 파일이 따로 있다는 점이었어요. 그것만이 아니죠. ESLint 플러그인이 새 버전에서 깨지거나, Prettier랑 ESLint가 서로 충돌하거나, Node.js 버전 올렸더니 빌드가 안 되거나. 실제 코드보다 환경 설정에 더 많은 시간을 쓰는 경우가 적지 않았거든요.
Vite+는 이걸 정면으로 해결해요. 하나의 바이너리 `vp`가 런타임, 패키지 매니저, 개발 서버, 테스트, 린팅, 포맷팅, 빌드를 전부 담당하고, 설정도 `vite.config.ts` 한 파일이면 끝이에요. 프로젝트 루트가 깔끔해지는 건 덤이고, 도구 간 설정 충돌이 애초에 발생할 수가 없죠.
설치도 한 줄이에요.
``` curl -fsSL https://vite.plus | bash ```
Windows라면 `irm https://vite.plus/ps1 | iex`. 설치 끝나면 `vp` 명령어 하나로 모든 게 시작돼요.
Rust가 만든 체감 속도의 차이
`vp` 안에 들어있는 도구들의 성능을 기존 도구와 비교하면 숫자가 좀 웃겨요.
빌드는 Rollup(Vite 7) 대비 Rolldown(Vite 8)이 1.6~7.7배 빠르고, 린팅은 ESLint 대비 Oxlint가 50~100배, 포맷팅은 Prettier 대비 Oxfmt가 약 30배. 이유는 단순해요. 기존 도구들은 자바스크립트로 만들어졌고, Vite+ 도구들은 전부 Rust로 만들어졌거든요.
실제 사례도 있어요. Linear는 프로덕션 빌드가 46초에서 6초로 줄었고, Ramp는 57% 단축됐다고 해요. CI 환경에서 린팅과 포맷팅이 수십 배 빨라지면 피드백 루프가 눈에 띄게 짧아지잖아요. (솔직히 50~100배라는 숫자를 보면 "기존 ESLint가 얼마나 느렸던 거야"라는 생각이 먼저 들긴 하지만요.)
명령어 하나로 뭘 할 수 있냐면
핵심 명령어를 하나씩 보면:
`vp dev` — 기존 Vite 개발 서버와 동일한 HMR 제공. 내부적으로 Vite 8의 Rolldown 엔진을 쓰기 때문에 기존 개발 경험을 그대로 누릴 수 있어요.
`vp check` — 한 방이면 타입 검사(tsgo), 린팅(Oxlint), 포맷팅(Oxfmt) 검사가 동시에 돌아가요. `--fix` 붙이면 자동 수정까지 되고요.
`vp test` — Vitest 내장이라 별도 설치 없이 바로 테스트. 기존 Vitest 사용자라면 코드 그대로 가져올 수 있어요.
`vp build` — Rolldown 기반 프로덕션 빌드.
`vp env install 22 && vp env use 22` — Node.js 버전 관리. nvm이나 mise 없이도 프로젝트별 버전 지정이 돼요.
`vp install`, `vp add react`, `vp remove lodash`, `vp outdated` — 패키지 관리까지. 기존 패키지 매니저가 뭐든 알아서 감지하고 올바른 매니저로 설치를 진행하더라고요.
설정 통합이 진짜 매력
개인적으로 가장 끌리는 건 설정 통합이에요. `vite.config.ts` 하나에 Vite 플러그인, Vitest 설정, Oxlint 설정, Oxfmt 설정, 커스텀 태스크, Git staged 파일 검사까지 전부 들어가요.
```typescript import { defineConfig } from "vite-plus";
export default defineConfig({ plugins: [], test: { include: ["src/*/.test.ts"] }, lint: { ignorePatterns: ["dist/**"] }, fmt: { semi: true, singleQuote: true }, run: { tasks: { "generate:icons": { command: "node scripts/generate-icons.js", cache: true, }, }, }, staged: { "*": "vp check --fix" }, }); ```
모노레포 운영하는 팀이라면 태스크 러너인 Vite Task도 쓸만해요. `package.json`의 의존성 그래프를 분석해서 태스크를 올바른 순서로 실행하고, 입력 파일 핑거프린트를 자동으로 추적해서 변경 없으면 캐시된 결과를 그대로 가져다 써요. Turborepo처럼 캐시 설정을 따로 잡아줄 필요가 없다는 게 다른 점이죠.
기존 생태계와 단절? 그건 아니에요
Oxlint는 ESLint 규칙 호환, Oxfmt는 Prettier 스타일 호환, Vitest는 이미 Jest 호환 API 제공, Rolldown은 Rollup 플러그인 API 호환. 기존 생태계가 그대로 돌아간다는 얘기예요. `vp migrate` 명령어가 기존 설정 파일들을 분석해서 `vite.config.ts`로 변환해주기 때문에 마이그레이션도 비교적 수월하고요.
GitHub Actions에서도 공식 `setup-vp` 액션 하나면 끝이에요.
```yaml steps: - uses: actions/checkout@v4 - uses: voidzero-dev/setup-vp@v1 - run: vp install - run: vp check - run: vp test - run: vp build ```
로컬에서 `vp check` 통과했으면 CI에서도 통과할 거라는 확신. 통합 툴체인의 핵심 장점이죠.
아직 알파 단계이긴 해요. 근데 MIT 라이선스 완전 오픈소스이고, Vite+로 개발한 앱을 Cloudflare에 풀스택 배포하는 Void 플랫폼도 함께 공개됐어요. 기존에 Vite 쓰고 계셨다면 `vp migrate`로 한번 시도해보는 것도 나쁘지 않을 거예요. 설정 파일이 정리되고 빌드가 빨라지는 건 — 직접 느껴봐야 알 수 있는 종류의 쾌감이니까요.