차세대 번들러 비교 및 분석 (feat. webpack, rollup, esbuild, vite)
https://bepyan.github.io/blog/2023/bundlers
번들러 : 여러개의 파일을 하나의 파일로 묶어주는 도구
- 번들링된 JS파일은 네트워크 요청 1번으로 가능하다.
- 최적화도 되어 있다.
Vite vs Webpack
ESBuild
ESBuild는 내부적으로 Go로 작성
- JS 기반의 번들러(Webpack)보다 10배에서 100배까지 빠른 엄청난 퍼포먼스
- 메이저 버전이 릴리즈 되지 못했다. ( v 0.21 )
- code splitting 및 CSS와 관련된 처리가 아직 미비
- esbuild는 es5 이하의 문법을 아직 100% 지원하지 않습니다.
Vite
서버구동이 빠른 이유
1.Dependencies와 Source code 를 분리해서 관리한다.
Dependencies는 개발 시작시 내용이 바뀌지 않는 Plain JS소스 코드 이며, ESBuild를
Source code : JSX, CSS 또는 Vue/Svelte 컴포넌트와 같이 컴파일링이 필요하고, 수정 또한 매우 잦은 Non-plain JavaScript 소스 코드
브라우저가 요청하는 대로 vite는 Native ESM을 이용해 소스 코드를 제공,
기존 방식은 모든 소스 코드를 바탕으로 번들 파일을 준비해두었다면, Native ESM은 필요한것만 그때그때 제공
2.HMR(Hot Module Replacement)
- 모든 파일에 대해서 번들링을 하는것은 비효율적이다. HMR 이라는 대안이 나왔다.
- vite도 HMR 지원, 그 과정에서 ESM을 이용해서 앱 사이즈와 무관함.
3.캐시 기능
- 소스 코드는 304 Not Modified로, 디펜던시는 Cache-Control: max-age=31536000,immutable을 이용해 캐시
특징
Vite는 기본적으로 ES6을 타겟으로 번들을 생성한다.
- ES5이하로 타겟팅 하려면 polyfill를 다뤄야 한다.
기본적으로 index.html 파일이 진입점이다.
- 순수한 JS 번들을 생성하기 위해서는 라이브러리 모드를 설정 > https://ko.vitejs.dev/guide/build.html#library-mode
Webpack에서 Vite로 넘어갈떄 장점
- 압도적으로 발전된 개발 환경