Babel과 Polyfill은 문법 변환과 런타임 API 보강을 나눠 맡는다
optional chaining 같은 syntax는 Babel이 바꿀 수 있지만 Promise, fetch, Array.prototype.at은 polyfill 전략이 필요하다.
| 구분 | 해결하는 문제 | 대표 도구 | 검증 기준 |
|---|---|---|---|
| Syntax | 브라우저가 새 문법을 파싱하지 못함 | Babel plugin, preset-env | 구형 브라우저에서 문법 오류 없음 |
| Target | 지원 브라우저 범위 결정 | browserslist | 실제 사용자 환경과 일치 |
| Runtime API | 실행 환경에 없는 객체와 메서드 | core-js, fetch polyfill | API 호출이 존재함 |
| Injection | polyfill을 어디에 넣을지 결정 | usage, entry, manual | 중복 주입과 번들 증가 방지 |
| Cost | 불필요한 변환과 보강 제거 | modern build, differential serving | 최신 브라우저에 과한 코드 전송 금지 |
문법을 못 읽는 문제와 API가 없는 문제를 구분해야 빌드 결과가 정확해진다.