Skip to main content
Sonamu의 Hot Module Replacement (HMR) μ‹œμŠ€ν…œμ—μ„œ λ°œμƒν•˜λŠ” λ¬Έμ œμ™€ ν•΄κ²° 방법을 λ‹€λ£Ήλ‹ˆλ‹€.

HMR이 μž‘λ™ν•˜μ§€ μ•ŠμŒ

증상

νŒŒμΌμ„ μˆ˜μ •ν•΄λ„ μ„œλ²„κ°€ μžλ™μœΌλ‘œ μž¬μ‹œμž‘λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

원인

  1. HMR 경계(boundary)κ°€ μ˜¬λ°”λ₯΄κ²Œ μ„€μ •λ˜μ§€ μ•ŠμŒ
  2. 파일 κ°μ‹œμžκ°€ 파일 변경을 κ°μ§€ν•˜μ§€ λͺ»ν•¨
  3. μˆœν™˜ μ˜μ‘΄μ„±μœΌλ‘œ μΈν•œ HMR μ‹€νŒ¨

ν•΄κ²° 방법

1. 개발 μ„œλ²„ μž¬μ‹œμž‘

2. HMR 경계 확인

HMR κ²½κ³„λŠ” hmr-hook-register.tsμ—μ„œ μ„€μ •λ©λ‹ˆλ‹€:
HMR 경계λ₯Ό λ³€κ²½ν•˜λ €λ©΄ 이 νŒŒμΌμ„ μˆ˜μ •ν•˜μ„Έμš”.

3. 파일 κ°μ‹œμž ν•œλ„ 증가 (Linux/macOS)

4. .gitignore νŒ¨ν„΄ 확인

HMR이 node_modulesλ‚˜ dist 같은 디렉토리λ₯Ό κ°μ‹œν•˜λ©΄ μ„±λŠ₯ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

파일 λ³€κ²½ ν›„ μ—λŸ¬ λ°œμƒ

증상

νŒŒμΌμ„ μˆ˜μ •ν•˜λ©΄ HMR이 λ™μž‘ν•˜μ§€λ§Œ μ—λŸ¬κ°€ λ°œμƒν•©λ‹ˆλ‹€:

원인

  1. μˆœν™˜ μ˜μ‘΄μ„± (circular dependency)
  2. 동적 importκ°€ μ˜¬λ°”λ₯΄κ²Œ μ²˜λ¦¬λ˜μ§€ μ•ŠμŒ
  3. ESM/CommonJS 혼용

ν•΄κ²° 방법

1. μˆœν™˜ μ˜μ‘΄μ„± 확인

발견된 μˆœν™˜ μ˜μ‘΄μ„±μ„ μ œκ±°ν•˜μ„Έμš”:

2. 동적 import 확인

HMR 경계 λ‚΄μ—μ„œλŠ” 동적 importλ₯Ό ν”Όν•˜μ„Έμš”:

HMR ν›„ νƒ€μž… μ—λŸ¬

증상

HMR이 λ™μž‘ν•œ ν›„ TypeScript νƒ€μž… μ—λŸ¬κ°€ λ°œμƒν•©λ‹ˆλ‹€:

원인

TypeScript μ„œλ²„κ°€ HMR 변경사항을 μΈμ‹ν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.

ν•΄κ²° 방법

1. TypeScript μ„œλ²„ μž¬μ‹œμž‘

VSCode:

2. 에디터 μž¬μ‹œμž‘

3. tsconfig.json 확인

HMR μ„±λŠ₯ μ €ν•˜

증상

νŒŒμΌμ„ μ €μž₯ν•  λ•Œλ§ˆλ‹€ HMR이 λŠλ¦¬κ±°λ‚˜ μ„œλ²„κ°€ 멈μΆ₯λ‹ˆλ‹€.

원인

  1. λ„ˆλ¬΄ λ§Žμ€ 파일이 HMR 경계에 포함됨
  2. 무거운 연산이 λͺ¨λ“ˆ λ‘œλ”© μ‹œμ μ— 싀행됨
  3. λ©”λͺ¨λ¦¬ λˆ„μˆ˜

ν•΄κ²° 방법

1. HMR 경계 μ΅œμ ν™”

hmr-hook-register.tsμ—μ„œ 경계 νŒ¨ν„΄ μˆ˜μ •:

2. λͺ¨λ“ˆ μ΄ˆκΈ°ν™” μ΅œμ ν™”

무거운 연산은 lazy loading으둜:

3. λ©”λͺ¨λ¦¬ ν”„λ‘œνŒŒμΌλ§

HMR 경계 μ„€μ • 였λ₯˜

증상

원인

HMR 경계 νŒ¨ν„΄μ΄ μ˜¬λ°”λ₯΄μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

ν•΄κ²° 방법

hmr-hook-register.tsμ—μ„œ μ˜¬λ°”λ₯Έ glob νŒ¨ν„΄ μ‚¬μš©:

νŠΉμ • 파일만 HMR이 μž‘λ™ν•˜μ§€ μ•ŠμŒ

증상

λŒ€λΆ€λΆ„μ˜ νŒŒμΌμ€ HMR이 잘 μž‘λ™ν•˜λŠ”λ°, νŠΉμ • 파일만 λ³€κ²½ μ‹œ μž¬μ‹œμž‘λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

원인

  1. 파일이 HMR 경계 νŒ¨ν„΄κ³Ό μΌμΉ˜ν•˜μ§€ μ•ŠμŒ
  2. 파일이 λͺ…μ‹œμ μœΌλ‘œ μ œμ™Έλ¨
  3. 파일이 λ‹€λ₯Έ λͺ¨λ“ˆμ—μ„œ μΊμ‹œλ¨

ν•΄κ²° 방법

1. 파일이 경계에 ν¬ν•¨λ˜λŠ”μ§€ 확인

파일 μ €μž₯ μ‹œ 둜그 확인:

2. μΊμ‹œ 클리어

3. 파일 이름 νŒ¨ν„΄ 확인

ESM/CommonJS 혼용 문제

증상

원인

HMR μ‹œμŠ€ν…œμ΄ ESM λͺ¨λ“ˆμ„ CommonJS둜 λ‘œλ”©ν•˜λ € ν–ˆμŠ΅λ‹ˆλ‹€.

ν•΄κ²° 방법

1. package.json μ„€μ •

2. 파일 ν™•μž₯자 λͺ…μ‹œ

3. tsconfig.json μ„€μ •

κ΄€λ ¨ λ¬Έμ„œ