728x90
반응형
1. 🧱 defineConfig()와 설정 구조 개요
Vite는 ESM 기반의 번들러로, vite.config.ts 또는 .js 파일을 통해 설정을 제공합니다.
이 설정 파일에서 defineConfig()는 타입 지원과 자동 완성을 위한 래퍼입니다.
// 기본 구조
import { defineConfig } from 'vite';
export default defineConfig({
root: '.', // 프로젝트 루트 (index.html 기준)
plugins: [], // 플러그인 배열
resolve: {}, // 경로 해석 관련 설정
build: {}, // 빌드 설정 (rollup 옵션 포함)
});
2. 🔍 주요 설정 속성 복기 및 해설
✅ root
- 기본값: process.cwd()
- 설명: 프로젝트의 루트 디렉토리 설정. 이 디렉토리 기준으로 index.html, src 등이 해석됨.
- 예시:
root: './demo', // ./demo/index.html이 엔트리로 사용됨
✅ base
- 기본값: '/'
- 설명: 빌드시 생성되는 자산의 URL prefix. CDN 경로 지정 등 외부 환경 대응에 사용.
- 예시:
base: './', // 상대 경로로 자산 import (file:// 테스트용)
base: '/static/', // Nginx 서브경로 대응
✅ plugins
- 설명: Vite의 플러그인 생태계 또는 Rollup 플러그인 포함 가능
- 주요 예시:
plugins: [
react(), // @vitejs/plugin-react-swc
tsconfigPaths(), // tsconfig.json 기반 경로 alias
removeCrossoriginPlugin() // 커스텀 HTML 수정 플러그인
]
✅ resolve
- 설명: 모듈 import 경로를 해석하는 방식 지정 (alias 등)
- 예시:
resolve: {
alias: {
'@editor': path.resolve(__dirname, 'src/editor'),
}
}
✅ build
- 설명: Vite → Rollup 기반 빌드 설정
- 주요 속성:
build: {
outDir: 'dist', // 출력 디렉토리
assetsDir: 'assets', // 정적 자산 폴더
sourcemap: true, // sourcemap 생성 여부
target: 'es2020', // 트랜스파일 타겟
minify: 'esbuild', // 'terser' or 'esbuild'
rollupOptions: {
input: './index.html', // HTML 엔트리 명시 (멀티페이지 대응 시 유용)
output: {
entryFileNames: `assets/[name]-[hash].js`,
chunkFileNames: `assets/[name]-[hash].js`,
assetFileNames: `assets/[name]-[hash].[ext]`,
},
},
emptyOutDir: true, // 기존 dist 제거 여부
}
3. 🧩 설정 상황 예시
🎯 A. 파일 시스템 기반 로딩 테스트 (file:// 환경 대응)
export default defineConfig({
base: './', // 상대 경로로 경로 지정
plugins: [
{
name: 'remove-crossorigin',
transformIndexHtml(html) {
return html.replace(/<script type="module" crossorigin/g, '<script type="module"');
}
}
]
});
🔥 B. 외부 CDN 자산 사용
export default defineConfig({
base: 'https://cdn.mycdn.com/myapp/',
});
🧩 C. 라이브러리 번들링 용도 (build.lib)
export default defineConfig({
build: {
lib: {
entry: path.resolve(__dirname, 'src/index.ts'),
name: 'MyLib',
fileName: format => `my-lib.${format}.js`
},
rollupOptions: {
external: ['react'],
output: {
globals: {
react: 'React'
}
}
}
}
});
🧠 마무리 팁
- vite build는 Rollup을 래핑한 고수준 추상화임.
- 파일 경로, publicPath(base), asset 위치 정책이 명확하지 않으면 정적 배포에서 이슈가 빈번하게 발생함.
- 로컬에서 file://로 열 경우엔 crossorigin, base, 상대경로의 정합성이 매우 중요함.
- 다중 HTML 엔트리를 사용하는 경우 rollupOptions.input을 꼭 명시할 것.
728x90
반응형
'Frontend' 카테고리의 다른 글
프론트엔드 개발자가 구독하거나 즐겨찾기 해두면 좋은 뉴스레터, 사이트 (0) | 2025.04.19 |
---|---|
tsconfig.json 설정 오류 해결: allowImportingTsExtensions는 왜 에러가 날까? (0) | 2025.04.15 |
[npm trends] 파일 압축 및 다운로드 관련 주요 라이브러리 비교(archiver,filesaver,jszip,pako,zipjs-browserify) (0) | 2025.04.11 |
프론트엔드 개발에서 KLOC(Kilo Lines of Code)을 어떻게 활용할까? (0) | 2025.04.01 |
프론트엔드도 알아야 할 Availability(가용성)과 Reliability(신뢰성) (0) | 2025.03.31 |