| name | good-bundling |
| description | Use when modifying build config, vite.config, adding new packages, setting up code splitting, or working with module resolution and imports |
Good Bundling
๋ฒ๋ค๋ง์ ์ฌ๋ฌ ํ์ผ์ ํ๋๋ก ํฉ์น๋ ๊ณผ์ ์ด๋ค. ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ๋ก๋ฉ ์๋๋ฅผ ๋์ด๋ ๊ฒ์ด ๋ชฉํ.
๋ฒ๋ค๋ง ๋์ ์๋ฆฌ
- Entry point๋ถํฐ
import/require๋ฅผ ๋ฐ๋ผ๊ฐ๋ฉฐ ๋ชจ๋ ๋ชจ๋ ํ์
- ์์กด์ฑ ๊ทธ๋ํ(Dependency Graph) ์์ฑ
- ํ์ผ๋ค์ ๋ณํฉํ์ฌ ๋ฒ๋ค ํ์ผ ์์ฑ
- ์ต์ ํ ์ ์ฉ: Tree Shaking, Code Splitting, Minification
ํต์ฌ ์ต์ ํ
Tree Shaking โ ์ฌ์ฉํ์ง ์๋ ์ฝ๋ ์ ๊ฑฐ
๋ฒ๋ค๋ฌ๊ฐ ์ค์ ์ฌ์ฉ๋๋ export๋ง ํฌํจํ๋๋ก ๋ถํ์ํ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๋ค.
import _ from "lodash";
import { debounce } from "lodash-es";
Tree Shaking์ด ์ ์ ๋๋ ๊ฒฝ์ฐ:
- CommonJS(
require)๋ก ์์ฑ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
index.ts barrel export ๋จ์ฉ (๋ถํ์ํ ๋ชจ๋๊น์ง ์ฐธ์กฐ๋จ)
- side effect๊ฐ ์๋ ๋ชจ๋ (
"sideEffects": false ์ค์ ํ์ธ)
Code Splitting โ ํ์ํ ๋๋ง ๋ก๋
๋ผ์ฐํธ ๋จ์๋ก lazy import๋ฅผ ์ ์ฉํ๋ฉด ์ด๊ธฐ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ผ ์ ์๋ค.
const LoginPage = lazy(() => import("./LoginPage"));
const DashboardPage = lazy(() => import("./DashboardPage"));
const { default: Chart } = await import("chart.js");
ํจํค์ง ์ถ๊ฐ ์ ์ฒดํฌ๋ฆฌ์คํธ
Import ๊ท์น
import _ from "lodash";
import * as R from "ramda";
import { debounce } from "lodash-es";
import { map } from "ramda";
barrel export(index.ts)๋ DX๋ฅผ ๋์ด์ง๋ง tree-shaking์ ๋ฐฉํดํ ์ ์๋ค. ๋ด๋ถ ๋ชจ๋์์ ์๋ก ์ฐธ์กฐํ ๋๋ ์ง์ ๊ฒฝ๋ก import๋ฅผ ๊ณ ๋ คํ๋ค.
๋น๋ ํ์ธ
pnpm --filter front build
pnpm --filter front build --mode analyze