Vite 8
Vite 8.x, https://vite.dev/guide/ 에서 참조. 각 설명은 출처 페이지로 끝납니다.
탐색 방법
- 아래의 빠른 규칙을 먼저 읽으세요. 가장 자주 발생하는 실수를 잡아줍니다.
- 작업과 일치하는 하나의 참조 파일을 마지막 표에서 열어보세요.
rollupOptions,esbuild또는manualChunks의 경우 먼저references/migration.md를 읽으세요.
빠른 시작
// vite.config.ts
import { defineConfig, loadEnv } from 'vite'
import react from '@vitejs/plugin-react'
export default defineConfig(({ mode }) => {
const env = loadEnv(mode, process.cwd(), '') // 여기서 .env 파일은 process.env에 없습니다.
return {
plugins: [react()],
server: { port: Number(env.PORT ?? 5173), strictPort: true },
build: {
rolldownOptions: { output: { /* Rollup이 아닌 Rolldown 옵션 */ } },
},
}
})
{ "compilerOptions": { "types": ["vite/client"], "isolatedModules": true } }
- Node.js 20.19+ 또는 22.12+.
npm create vite@latest my-app -- --template react-ts로 스캐폴딩. https://vite.dev/guide/ - 스크립트:
vite(개발, 포트 5173),vite build,vite preview(포트 4173, 로컬 확인 전용, 프로덕션 서버 절대 안 됨). https://vite.dev/guide/cli , https://vite.dev/config/preview-options - Vite는 절대 타입 검사를 하지 않습니다.
tsc --noEmit을 함께 실행하세요. https://vite.dev/guide/features#transpile-only
빠른 규칙
툴체인 및 설정
- Rolldown은 빌드를 번들링하고 의존성을 사전 번들링합니다. Oxc는 JS를 변환 및 압축(minify)하고, Lightning CSS는 CSS를 압축합니다. https://vite.dev/guide/why#a-unified-toolchain , https://vite.dev/guide/migration#dependency-optimizer-now-uses-rolldown , https://vite.dev/guide/migration#javascript-transforms-by-oxc , https://vite.dev/guide/migration#css-minification-by-lightning-css
build.rolldownOptions,worker.rolldownOptions,optimizeDeps.rolldownOptions및oxc를 사용하세요.rollupOptions,esbuildOptions및esbuild키는 더 이상 사용되지 않습니다(deprecated). https://vite.dev/guide/migration#other-related-deprecations , https://vite.dev/guide/migration#javascript-transforms-by-oxc- 최상위
input옵션으로 진입점을 선언하세요.build.rolldownOptions.input,build.lib.entry및optimizeDeps.entries의 기본값입니다. https://vite.dev/config/shared-options#input - 청크 분할은
manualChunks가 아닌build.rolldownOptions.output.codeSplitting을 통해 이루어집니다. https://vite.dev/guide/build#chunking-strategy tsconfig의target은 무시됩니다:build.target을 설정하세요 (기본값'baseline-widely-available'). Vite는 폴리필을 추가하지 않으며,@vitejs/plugin-legacy를 사용하세요. https://vite.dev/guide/features#target , https://vite.dev/config/build-options#build-target , https://vite.dev/guide/build#browser-compatibility- Oxc는 네이티브 데코레이터를 낮추거나(lower) 속성을 난독화(mangle)할 수 없습니다.
@가 포함된 파일에 한정하여 Babel 또는 SWC를 추가하세요. https://vite.dev/guide/migration#javascript-transforms-by-oxc , https://vite.dev/guide/migration#javascript-minification-by-oxc - CommonJS의 기본 가져오기는 이제 전체
module.exports를 반환할 수 있습니다 ("got: object", "is not a function"). https://vite.dev/guide/migration#consistent-commonjs-interop , https://vite.dev/guide/troubleshooting#default-import-unexpectedly-returns-an-object
환경 변수 및 모드
VITE_로 시작하는 변수만 클라이언트 코드에 도달하며, 항상 문자열로 번들에 인라인됩니다. 절대 비밀 값을 넣지 말고,envPrefix: ''를 설정하지 마세요. https://vite.dev/guide/env-and-mode#env-variables , https://vite.dev/config/shared-options#envprefix.env파일은 설정이 실행된 후에 로드됩니다.vite.config에서는loadEnv(mode, root, '')를 사용하세요. https://vite.dev/config/#using-environment-variables-in-config- 셸 변수가
.env파일보다 우선합니다..env파일을 편집한 후에는 재시작이 필요합니다. https://vite.dev/guide/env-and-mode#env-files --mode와NODE_ENV는 독립적입니다:vite build --mode staging도 여전히 프로덕션 빌드입니다. https://vite.dev/guide/env-and-mode#node-env-and-modesimport.meta.env.BASE_URL을 문자 그대로 작성하세요. 대괄호 형태는 대체되지 않습니다. https://vite.dev/guide/build#public-base-path
개발 서버
server.allowedHosts: true또는server.cors: true를 절대 설정하지 마세요. 어떤 웹사이트든 소스 코드를 읽을 수 있습니다. https://vite.dev/config/server-options#server-allowedhosts , https://vite.dev/config/server-options#server-cors- 사용 중인 포트는
strictPort: true가 아닌 경우 자동으로 다음 포트로 이동합니다. https://vite.dev/config/server-options#server-port - WebSocket 설정은
server.ws에 있습니다.server.hmr은boolean | { overlay }만 유지합니다. https://vite.dev/config/server-options#server-hmr npm link후 또는 연결된 의존성을 편집한 후에는vite --force로 재시작하세요. https://vite.dev/guide/troubleshooting#outdated-pre-bundled-deps-when-linking-to-a-local-package- HMR 대신 전체 다시 로드가 발생하는 것은 순환 의존성 때문일 수 있습니다 (
vite --debug hmr). https://vite.dev/guide/troubleshooting#a-full-reload-happens-instead-of-hmr
빌드 및 배포
Cache-Control: no-cache로 HTML을 제공하고vite:preloadError에서 다시 로드하세요. 그렇지 않으면 배포 후 이전 페이지가 깨질 수 있습니다. https://vite.dev/guide/build#load-error-handlingimport.meta.glob인수는 리터럴이어야 합니다. 동적import()는./,../또는#으로 시작하고 파일 확장자로 끝나야 합니다:import(`./dir/${name}.js`). https://vite.dev/guide/features#glob-import-caveats , https://vite.dev/guide/features#dynamic-import- CSS를 문자열로 가져오기:
import css from './a.css?inline'..css의 기본 가져오기는 사라졌습니다. https://vite.dev/guide/features#disabling-css-injection-into-the-page - 라이브러리 모드는
import.meta.env.*를 정적으로 대체하지만process.env.*는 그대로 둡니다. https://vite.dev/guide/build#library-mode
플러그인, HMR, SSR
- 훅 필터를 사용하세요:
transform: { filter: { id: /\\.ext$/ }, handler }. 비-JS 변환 시moduleType: 'js'를 반환하세요. https://vite.dev/guide/api-plugin#hook-filters , https://vite.dev/guide/migration#module-type-support-and-auto-detection - 훅에서
ssr플래그 대신this.environment를 읽으세요.hotUpdate는handleHotUpdate의 환경 인식 대응물이며,handleHotUpdate의 폐기는 향후 메이저 버전에서만 계획되어 있습니다. https://vite.dev/guide/api-environment-plugins#accessing-the-current-environment-in-hooks , https://vite.dev/changes/hotupdate-hook configureServer미들웨어는 Vite의 미들웨어보다 먼저 실행됩니다. 나중에 실행하려면 함수를 반환하세요. https://vite.dev/guide/api-plugin#configureserverimport.meta.hot.accept(를if (import.meta.hot)안에 문자 그대로 작성하세요. https://vite.dev/guide/api-hmr#hot-accept-cb- SSR 개발:
server.middlewareMode: true및appType: 'custom',server.environments.ssr.runner.import()로 진입점을 로드하세요 (ssrLoadModule은 폐기 예정). https://vite.dev/guide/ssr#setting-up-the-dev-server , https://vite.dev/guide/api-environment-frameworks#runnabledevenvironment , https://vite.dev/changes/ssr-using-modulerunner vite build는 클라이언트만 빌드합니다.vite build --app은 모든 환경을 빌드합니다. https://vite.dev/guide/api-environment-frameworks#environments-during-build
이전 패턴
| 이전 | 현재 |
|---|---|
build.rollupOptions | build.rolldownOptions |
esbuild: { jsx..., jsxInject } | oxc: { jsx: {...}, jsxInject } |
optimizeDeps.esbuildOptions | optimizeDeps.rolldownOptions |
output.manualChunks | output.codeSplitting |
server.hmr.port, clientPort | server.ws.port, clientPort |
build.polyfillModulePreload | build.modulePreload.polyfill |
import s from './a.css' | import s from './a.css?inline' |
import.meta.hot.decline() (무효) | import.meta.hot.invalidate() |
server.ssrLoadModule(url) | environment.runner.import(url) |
handleHotUpdate + server.ws.send | hotUpdate + this.environment.hot.send |
참조 파일
| 파일 | 읽을 대상 |
|---|---|
| references/migration.md | Vite 7에서 8로: 이름이 변경된 옵션, CommonJS interop, 제거된 기능 |
| references/config-and-env.md | 설정, loadEnv, import.meta.env, 모드, base |
| references/code-features.md | TypeScript, JSX, HTML, CSS, assets, import.meta.glob, 동적 가져오기, 워커, WebAssembly |
| references/dev-server.md | 호스트, 포트, allowedHosts, CORS, 프록시, 미들웨어 모드, 프리뷰 |
| references/dependencies-and-performance.md | 사전 번들링, optimizeDeps, 연결된 패키지, 개발 속도 |
| references/build.md | 대상, rolldownOptions, 청크, 라이브러리 모드 |
| references/backend-integration-and-deploy.md | 백엔드 통합, 매니페스트, 정적 호스팅 |
| references/ssr.md | SSR 개발 서버, 프로덕션 빌드, 외부 모듈, 플러그인 |
| references/plugins.md | 플러그인 훅, 필터, 가상 모듈, 순서 |
| references/hmr-and-javascript-api.md | import.meta.hot, 사용자 정의 이벤트, createServer, build, preview |
| references/environment-api.md | environments 설정, this.environment, configEnvironment, 환경별 상태 |
| references/environment-frameworks.md | builder.buildApp, ModuleRunner |
읽은 페이지: SOURCES.md.