/// import babel from '@rolldown/plugin-babel'; import tailwindcss from '@tailwindcss/vite'; import react, { reactCompilerPreset } from '@vitejs/plugin-react'; import { defineConfig } from 'vite'; export default defineConfig({ // dev 기동 시 터미널을 지우지 않는다 — 스캐폴더(npx)가 dev 직전에 출력한 // "새 터미널에서 claude" 안내가 지워지면 비개발자가 다음 단계를 잃는다. clearScreen: false, server: { // 3000은 희망 포트다(Vite 기본 5173과 어긋나지 않게 고정). 점유돼 있으면 3001, 3002…로 밀린다. // strictPort를 켜두면 이미 다른 사이트를 띄워둔 사람에게 기동이 통째로 실패하는데, // 비개발자에겐 그게 스택트레이스로만 보여서 복구할 방법이 없다. // 대신 포트를 알아야 하는 쪽(스캐폴더·show-screen)은 --port로 직접 지정하거나 // 실제 리슨 포트를 확인해서 쓴다 — 어느 포트로 떴는지 추측하지 않는다. port: 3000, strictPort: false, // 켜지면 브라우저가 자동으로 열린다 — "시작됐다"를 비개발자가 인지하는 신호. // CI에선 열지 않고, 하네스(show-screen)는 BROWSER=none으로 끈다(탭 중복 방지). open: process.env.CI === undefined, }, plugins: [ react(), // React Compiler: Vite 8(rolldown)에선 babel 파이프라인을 별도 플러그인으로 연결한다. babel({ presets: [reactCompilerPreset()] }), tailwindcss(), ], resolve: { // tsconfig의 paths(@/* → src/*)를 Vite가 직접 해석한다. tsconfigPaths: true, }, test: { globals: true, environment: 'jsdom', setupFiles: ['./vitest.setup.ts'], css: true, coverage: { provider: 'v8', reporter: ['text', 'lcov'], }, }, });