mason
mason-log.

mason

mason.

안녕하세요. mason 입니다.

tooling

Webpack.

번들러 역할, entry/output, loader, plugin, dev server, HMR

Webpack은 여러 **모듈(JS, CSS, 이미지 등)**을 의존 그래프로 묶어 브라우저가 로드할 번들을 만드는 모듈 번들러입니다.

🧰 Webpack이 하는 일

Webpack 엔트리부터 아웃풋 청크 파이프라인

  1. Entry — 그래프 시작점 (./src/index.tsx)
  2. Resolve — import 경로 해석 (alias, extension)
  3. Loaders — non-JS → JS module (babel-loader, css-loader, file-loader)
  4. Plugins — 번들 최적화, HTML inject, env 변수 (HtmlWebpackPlugin, DefinePlugin)
  5. Outputdist/bundle.[contenthash].js
  6. Code Splitting — dynamic import() → chunk

🔀 Loader vs Plugin

LoaderPlugin
시점파일 변환 (module level)번들 lifecycle 전반
babel-loader, sass-loaderMiniCssExtractPlugin, TerserPlugin
module: {
  rules: [
    { test: /\.tsx?$/, use: 'babel-loader', exclude: /node_modules/ },
    { test: /\.css$/, use: ['style-loader', 'css-loader'] },
  ],
},
plugins: [new HtmlWebpackPlugin({ template: 'index.html' })],

🔥 Dev Server, HMR

  • 메모리에서 serve, proxy API

  • 전체 reload 없이 변경 모듈만 교체

  • React Fast Refresh — HMR + React 컴포넌트 state 유지 (babel plugin)

  • Create React App(legacy), Next.js(custom webpack), Storybook webpack config

  • chunk 크기 시각화

  • ESM + sideEffects: false + production mode

  • Next.js 15는 기본 Turbopack dev, webpack도 선택 가능

🔗 참고 자료

  • Concepts — entry, output, loader, plugin 개념을 설명한다.
  • Loaders — 모듈 단위 변환 규칙을 설명한다.
  • Plugins — 번들 라이프사이클 확장을 설명한다.
  • Hot Module Replacement — HMR 동작을 설명한다.