Skip to content

v5에서 마이그레이션하기

환경 API

실험적이고 새로운 환경 API를 위해 커다란 내부 리팩토링이 필요했습니다. 그럼에도 Vite 6는 프로젝트 대부분이 새로운 메이저 버전으로 빠르게 업그레이드할 수 있도록 호환성을 유지하고자 노력했습니다. 우리는 생태계가 새로운 API를 준비하고 사용할 때까지 기다릴 예정입니다. 일부 엣지 케이스가 있을 수는 있지만, 저수준 API를 사용하는 프레임워크 및 도구에 대해서만 영향을 미칠 것입니다. 릴리스 전 생태계 내 메인테이너들과 협력하여 이러한 차이를 완화하기 위해 노력했습니다. 만약 문제점을 발견하셨다면 이슈를 생성해 주세요.

Vite 구현 변경으로 인해 내부 API 중 일부가 제거되었습니다. 이러한 API를 사용하고 계셨다면, 기능 요청을 생성해 주세요.

Vite 런타임 API

실험적인 Vite 런타임 API는 모듈 러너 API로 발전했으며, Vite 6에서 새롭고 실험적인 환경 API의 일부로 릴리스되었습니다. Vite 5.1에서 도입된 API가 실험적인 기능이었음을 고려할 때, 이를 제거하는 것이 호환성을 깨뜨리는 변경 사항까지는 아니지만, Vite 6로 마이그레이션하기 위해 모듈 러너에 해당하는 기능으로 업데이트해야 합니다.

일반적인 변경 사항

resolve.conditions 기본값

이 변경 사항은 resolve.conditions / ssr.resolve.conditions / ssr.resolve.externalConditions를 설정하지 않은 사용자에게는 영향을 미치지 않습니다.

Vite 5에서 resolve.conditions 기본값은 []였으며, 일부 조건들이 내부적으로 추가되었습니다. 참고로 ssr.resolve.conditionsresolve.conditions 값을 기본값으로 사용했었습니다.

Vite 6부터는 일부 조건들이 더 이상 내부적으로 추가되지 않으며, 항상 설정에 명시해야 합니다. 이 조건들은 다음과 같습니다:

  • resolve.conditions: ['module', 'browser', 'development|production']
  • ssr.resolve.conditions: ['module', 'node', 'development|production']

다만 이 값들은 이제 기본값이며, ssr.resolve.conditions는 더 이상 resolve.conditions를 사용하지 않습니다. 참고로 development|productionprocess.env.NODE_ENV 값에 따라 production 또는 development로 대체되는 특별한 변수입니다. 이러한 기본값들은 vite에서 defaultClientConditionsdefaultServerConditions로 제공됩니다.

만약 resolve.conditions 또는 ssr.resolve.conditions에 대해 커스텀 값을 지정했다면, 새로운 조건들을 포함하도록 업데이트해야 합니다. 예를 들어, 이전에 resolve.conditions에 대해 ['custom']을 지정했다면, 대신 ['custom', ...defaultClientConditions]를 지정해야 합니다.

JSON stringify

Vite 5에서는 json.stringify: true가 설정되면 json.namedExports가 비활성화되었습니다.

Vite 6부터는 json.stringify: true가 설정되어 있어도 json.namedExports가 비활성화되지 않으며, 설정을 유지합니다. 이전 동작을 유지하고 싶다면 json.namedExports: false로 설정해 주세요.

또한 Vite 6는 json.stringify의 새로운 기본값으로, 커다란 JSON 파일만 문자열화하는 'auto'를 추가했습니다. 이 동작을 비활성화하려면 json.stringify: false로 설정하세요.

HTML 요소에 대한 에셋 참조 지원 확장

Vite 5에서는 <link href>, <img src> 등과 같이 Vite에서 처리하고 번들링할 에셋을 참조할 수 있는 HTML 요소는 한정적이었습니다.

Vite 6는 더 많은 HTML 요소에 대해 이와 같은 기능을 지원합니다. 전체 목록은 HTML 기능 문서를 확인해 주세요.

특정 요소에 대해 HTML 처리를 비활성화하려면, 해당 요소에 vite-ignore 속성을 추가해 가능합니다.

postcss-load-config

postcss-load-config가 v4에서 v6로 업데이트되었습니다. TypeScript postcss 설정 파일을 로드하기 위해 ts-node 대신 tsx 또는 jiti가 필요합니다. 또한 YAML postcss 설정 파일을 로드하기 위해 yaml이 필요합니다.

Sass는 이제 기본적으로 모던 API를 사용합니다

Vite 5에서는 Sass에 대해 기본적으로 레거시 API가 사용되었습니다. Vite 5.4에서 모던 API에 대한 지원이 추가되었습니다.

Vite 6부터는 Sass에 대해 기본적으로 모던 API가 사용됩니다. 여전히 레거시 API를 사용하고 싶다면 css.preprocessorOptions.sass.api: 'legacy' / css.preprocessorOptions.scss.api: 'legacy'로 설정해 주세요. 단, 레거시 API 지원은 Vite 7에서 제거될 예정입니다.

모던 API로 마이그레이션하려면 Sass 문서를 참고해 주세요.

라이브러리 모드에서 CSS 출력 파일 이름 커스터마이징

Vite 5에서는 라이브러리 모드의 CSS 출력 파일 이름이 항상 style.css였으며, Vite 설정으로는 쉽게 변경할 수 없었습니다.

Vite 6부터는 파일 이름이 JS 출력 파일과 유사하게 package.json "name"을 기본적으로 사용합니다. 또한 build.lib.fileName이 문자열로 설정된 경우, 해당 값이 CSS 출력 파일 이름에도 사용됩니다. CSS 파일 이름을 명시적으로 설정하려면, 새로운 옵션인 build.lib.cssFileName을 사용할 수 있습니다.

마이그레이션 시, style.css 파일 이름에 대해 의존성이 존재하는 경우, 패키지 이름을 기반으로 하는 새로운 이름으로 변경해야 합니다. 아래는 예시입니다:

package.json
json
{
  "name": "my-lib",
  "exports": {
    "./style.css": "./dist/style.css"
    "./style.css": "./dist/my-lib.css"
  }
}

이 대신 Vite 5에서와 같이 style.css를 유지하고자 한다면 build.lib.cssFileName: 'style'로 설정해 주세요.

고급

일부 사용자에게만 영향을 미치며, 호환성이 유지되지 않는 변경 사항들이 있습니다.

v4에서 마이그레이션

먼저 Vite v5의 v4에서 마이그레이션하기 문서를 확인해 앱을 Vite 5로 포팅하는 데 필요한 사항을 진행한 다음, 이 페이지에서 마이그레이션을 진행하세요.

Released under the MIT License. (a454677f)