빠른 프론트엔드 개발 환경을 만들어주는 빌드 툴이다.
Webpack, Parcel, Rollup 같은 도구와 비슷한 역할을 하지만, 훨씬 빠른 개발 서버 속도와 빌드 성능을 제공하는것으로 알려져있다.
특히, ES Module 방식으로 로드하기 때문에 아래와 같은 장점을 지닌다.
HMR)native ESM(import/export) 기능을 활용Vite는 기본적으로 JS/JSX 처리를 지원한다.
하지만Babel을 추가하면 아래와 같은 장점을 얻을 수 있다.
| 상황 | Babel이 필요 없는 경우 | Babel이 유용한 경우 |
|---|---|---|
| 기본 JS/JSX 변환 | Vite의 esbuild 또는 swc로 충분 | Babel이 없어도 됨 |
| 최신 브라우저 대상 | Vite 기본 설정으로 충분 | 없음 |
| 구버전 브라우저 호환 | 기본 지원 부족 | Babel + preset-env 사용 |
| 커스텀 문법 | 기본 지원 안 됨 | Babel Plugin으로 처리 |
| 코드 변환 테스트 | esbuild 사용 | Babel 플러그인으로 실험 가능 |
| React 자동 런타임 | Vite 기본 지원 | Babel로 세밀한 설정 가능 |
| 타입스크립트 변환 | esbuild로 충분 | Babel로 타입 제거 후 변환 가능 (선택사항) |
대부분의 경우는 Vite 단독으로도 충분하지만, 구버전 브라우저와의 연동이나 커스텀 변환이 필요할 경우 Babel이 필요하다.
npm create 명령어로 Vite 프로젝트를 생성할 수 있다.
npm create vite@latest
Vite 프로젝트는 기본적으로 아래와 같은 구조를 따라야한다.
vite.config.js : Vite의 모든 설정 관리@ -> src/)src/ : 소스 코드public/ 정적 파일(이미지, 폰트 등)설정 예시
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
export default defineConfig({
plugins: [react()],
resolve: {
alias: {
'@': '/src',
},
},
build: {
outDir: 'build', // dist 대신 build 폴더 사용
},
});
주요 설정 항목들
/my-app/ 등)@/components 등)dist 등)빌드
npm run build
기본적으로 /dist 폴더에 정적 파일을 생성(HTML, CS, CSS 등)
배포 예시
dist 폴더를 정적 배포vite.config.js에서 base 설정 필요 (my-repo)dist 폴더를 /var/www/html/ 등으로 이동dist 폴더를 S3에 업로드, CloudFront로 배포.env 파일로 개발/운영 환경 분리VITE_ 접두어를 붙여야 클라이언트 코드에서 사용 가능.env 파일 예시
VITE_API_URL=https://api.example.com
사용 예시
console.log(import.meta.env.VITE_API_URL);
Vite의 기능을 확장하거나 개발 환경을 커스터마이즈할 때 사용한다.플러그인의 역할
플러그인 목록
@vitejs/plugin-react : React 지원@vitejs/plugin-vue : Vue 지원@vitejs/plugin-legacy : 구버전 브라우저 지원(ex. IE 11)vite-plugin-svgr : SVG 파일을 React 컴포넌트로 사용 가능vite-plugin-pwa : PWA 지원vite-plugin-compression : 빌드 결과물 gzip 압축vite-plugin-legacy : 구버전 브라우저 지원 추가vite-plugin-pages : 파일 기반 라우팅 자동 생성vite-plugin-html : HTML 템플릿 확장 및 변환 가능설치 및 사용 예시
npm install --save-dev @vitejs/plugin-react
vite.config.js
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
export default defineConfig({
plugins: [react()],
});
vite-plugin-svgr)npm install --save-dev vite-plugin-svgr
vite.config.js
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import svgr from 'vite-plugin-svgr';
export default defineConfig({
plugins: [react(), svgr()],
});
사용 예시
import { ReactComponent as Logo } from './logo.svg';
export default function App() {
return <Logo />;
}