Vite로 프로젝트를 마이그레이션한 후, 주석을 변경하거나 단순히 콘솔 로그를 추가/삭제하는 사소한 작업에도 전체 페이지가 새로고침되는 문제가 발생했습니다. Vite의 HMR(Hot Module Replacement) 기능은 코드 변경 시 필요한 모듈만 업데이트하여 애플리케이션 상태를 유지하며 빠르게 변경 사항을 반영해야 하지만, 의도와 다르게 페이지 전체가 리로드되는 상황이었습니다. 이 문제를 해결하기 위해 원인을 파악하고 단계적으로 해결 방안을 적용했습니다.
최종적으로는 마지막 업데이트로 해결 하였습니다.
먼저, Vite 설정 파일(vite.config.js
)에서 HMR 설정을 확인하고 기본적으로 활성화된 오류 오버레이를 비활성화하였습니다.
// vite.config.js
import { defineConfig } from "vite";
export default defineConfig({
server: {
hmr: {
overlay: false, // 브라우저 오버레이 비활성화
},
},
});
HMR의 동작을 더욱 세밀히 조정하여, 불필요한 새로고침이나 연결 문제가 발생하지 않도록 추가 설정을 진행했습니다.
// vite.config.js
import { defineConfig } from "vite";
export default defineConfig({
server: {
hmr: {
overlay: false, // 브라우저 오버레이 비활성화
protocol: 'ws', // 웹소켓 프로토콜 사용
timeout: 30000, // HMR 연결 시간 제한
},
watch: {
ignored: ['**/node_modules/**', '**/.git/**', '**/dist/**'], // 감시 제외 대상 설정
},
},
});
overlay: false
protocol: 'ws'
ws
(WebSocket)를 사용하며, HTTPS 환경에서는 보안을 위해 wss
(WebSocket Secure)를 사용할 수도 있습니다.timeout: 30000
watch.ignored
위 설정을 통해:
HMR 문제는 종종 브라우저나 Vite의 캐시와 관련이 있을 수 있습니다. 모든 캐시를 삭제한 후 다시 설치하여 문제를 해결했습니다.
rm -rf node_modules/.vite
rm -rf node_modules
npm install
Vite와 관련 플러그인들이 최신 버전인지 확인하고 업데이트를 진행했습니다. 최신 버전은 알려진 버그가 수정된 상태일 가능성이 높습니다.
npm update
위 단계를 따라 설정을 점검하고 문제를 해결하면, Vite의 HMR 기능이 정상적으로 작동하여 다음과 같은 결과를 얻을 수 있습니다: