우당탕탕

2026년 Vite 마이그레이션 중 꼭 알아야 할 설정 변경점들 본문

언어/JavaScript

2026년 Vite 마이그레이션 중 꼭 알아야 할 설정 변경점들

모찌모찝 2026. 8. 6. 19:18

제가 기존에 Vue CLI에서 Vite로 마이그레이션을 진행하면서 생각보다 삽질이 꽤 많았는데요. 특히 2026년 들어서 Vite가 업데이트되면서 작년과 달라진 설정이나 플러그인 호환 문제가 있어서 더 헷갈렸어요. 그래서 이 글에서는 실제 제가 경험한 문제들과 해결법을 중심으로 최신 변경점 위주로 정리해보려고 합니다.

Vite로 넘어가면서 설정을 어떻게 바꿔야 하는지, 플러그인 호환성은 어떤지, 특히 2026년 버전에서 새롭게 바뀐 부분들은 무엇인지 단계별로 다뤄볼게요.

개발 환경 / 버전 정보

이번 마이그레이션에 사용한 버전은 Vite 4.3.2, Vue 3.3, Node.js 18입니다. 작년과 달리 Vite 4 이상에서는 플러그인 API가 일부 변경되고, 기본 빌드 설정도 강화된 부분들이 있어서 미리 체크가 필요했어요.

Vite로 마이그레이션하면서 막혔던 설정들 관련 이미지

Vite로 마이그레이션하면서 막혔던 설정들 관련 정보

Vite 설정에서 바뀐 부분 이렇게 처리했습니다

사실 이 부분이 가장 헷갈렸는데요, 2026년 들어 Vite의 기본 설정이 조금 더 엄격해졌습니다. 특히 vite.config.js에서의 alias 문법이 달라져서 기존처럼 썼다간 빌드 오류가 나더라고요.

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { fileURLToPath, URL } from 'url'

export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    }
  }
})

여기서 핵심은 fileURLToPath(new URL())를 사용해서 경로를 정확히 변환해줘야 한다는 거예요. 작년까진 문자열 alias로도 대부분 동작했지만, 2026년 버전부터는 이렇게 명확히 지정해줘야 경로 문제를 피할 수 있다는 점 기억하세요.

플러그인 호환성 때문에 고생했던 부분

그런데 여기서 끝이 아니었어요. Vite 4로 올라가면서 몇몇 대표적인 플러그인들이 아직 완전 호환되지 않는 경우가 있어서 막히기도 했거든요. 제가 특히 애먹었던 건 vite-plugin-svg-iconsvite-plugin-env-compatible였어요.

예를 들어, svg 아이콘 플러그인은 4버전에서 API가 달라졌는데, 문서가 아직 완전히 최신화 안 돼서 공식 깃허브 이슈를 뒤져서 해결했습니다.

import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
import path from 'path'

export default defineConfig({
  plugins: [
    createSvgIconsPlugin({
      iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')],
      symbolId: 'icon-[dir]-[name]',
      // 2026년 버전에서 추가된 옵션
      // cacheDir: 'node_modules/.vite/svg-icon-cache',
    })
  ]
})

cacheDir 옵션이 새로 추가됐는데, 이걸 안 쓰면 빌드 때 캐시 문제로 아이콘이 안 보이는 현상이 있었어요. 사소해 보여도 꼭 넣어야 하는 부분이니 참고하세요.

Vite로 마이그레이션하면서 막혔던 설정들 직접 정리한 자료

Vite로 마이그레이션하면서 막혔던 설정들 관련 정보

이렇게 하면 환경 변수 처리 문제 안 생겨요

환경 변수를 다루는 것도 조금 까다로웠던 부분이에요. Vite가 2026년부터는 import.meta.env를 표준으로 엄격히 쓰도록 바뀌면서 기존에 process.env에 의존하던 코드가 통째로 작동하지 않더라고요.

그래서 저는 다음과 같이 공식 플러그인을 사용해서 호환성을 확보했어요.

import envCompatible from 'vite-plugin-env-compatible'

export default defineConfig({
  plugins: [
    envCompatible({
      prefix: 'VITE_', // 기본값이지만 명시적으로 써줌
      // 2026년 버전에서는 process.env 접근 제한이 강해졌기 때문에
      // 반드시 플러그인으로 래핑 필요
    })
  ]
})

이렇게 하면 기존 코드 내 process.env.VITE_API_KEYimport.meta.env.VITE_API_KEY로 안전하게 매핑할 수 있어서 마이그레이션 부담이 줄더라고요.

여기서 삽질했던 부분들

제가 가장 오래 걸렸던 문제가 바로 빌드 속도 및 캐시 문제였어요. 새 버전 Vite가 내부 최적화를 많이 했지만, 플러그인 설정이 꼬이면 빌드가 느려지거나 예전에 캐시된 코드가 적용되어 이상한 버전이 배포되는 경우가 있더라고요.

✗ "TypeError: Cannot read property 'split' of undefined" during build
✗ 빌드 시 src 경로가 제대로 인식되지 않음
✗ 환경 변수 치환이 안 돼서 프로덕션 빌드가 엉뚱한 값 반영

이런 문제들은 대부분 alias 설정이나 플러그인 호환성 문제에서 기인했더라고요. 그래서 위에 적어둔 대로 명확한 경로 alias, 최신 플러그인 API 맞추기, 환경 변수 래핑 플러그인 사용으로 크게 해결됐습니다.

Vite로 마이그레이션하면서 막혔던 설정들 참고 사진

Vite로 마이그레이션하면서 막혔던 설정들 관련 정보

심화: TS와 JSX 지원은 이렇게 하면 편해요

추가로 TypeScript와 JSX를 쓰는 분들은 이 부분도 2026년 Vite에서 꼭 신경 써야 해요. Vite 4부터는 기본 tsconfig 경로 해석이 더 엄격해졌고, Vue JSX 플러그인도 최신 2.x 버전을 써야 제대로 작동합니다.

import vueJsx from '@vitejs/plugin-vue-jsx'

export default defineConfig({
  plugins: [vue(), vueJsx()],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    }
  }
})

그리고 tsconfig.json에선 아래 옵션들을 넣어줘야 복잡한 경로 구성이 문제 없이 풀려요.

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/*": ["src/*"]
    },
    "jsx": "preserve",
    "strict": true
  }
}

자주 물어보시는 것들

Q. Vite 3에서 쓰던 플러그인이 4에서 갑자기 안 되면 어떻게 해야 할까요?

A. 플러그인 리포지터리 이슈 페이지나 공식 문서 최신 버전을 꼭 확인해보세요. 2026년부터 플러그인 API가 일부 바뀌어서, 별도의 마이그레이션 가이드나 새 버전이 있을 가능성이 큽니다. 직접 코드를 수정하거나 fork 해서 쓰기도 했고, 임시로 호환 플러그인(deprecated 버전) 쓰는 경우도 있어요.

Q. vite.config.js와 vite.config.ts 중 어느 걸 쓰는 게 좋을까요?

A. TypeScript 프로젝트라면 vite.config.ts를 추천해요. 타입 체크와 자동완성 덕분에 설정 오류를 미리 잡을 수 있어 개발 생산성이 올라가더라고요.

작년과 다르게 2026년의 Vite는 변화가 꽤 크니, 미리 변경점과 호환성 이슈를 준비하는 게 시간을 크게 아끼는 방법이라는 걸 다시 한번 느꼈습니다. 혹시 Vue가 아니고 React나 Svelte로 마이그레이션 하는 분들도 비슷한 맥락에서 최신 문서 꼭 참고하세요.

Comments