模块打包器
module-bundlers;bundler 职责。
30 分钟
模块打包器
浏览器能执行 ES Module,但生产项目仍有成百上千个文件、TypeScript、JSX、CSS 预处理——模块打包器(bundler) 把源码图编译、合并、优化成可部署的产物。
学习目标
- 说清 bundler 的四大职责:解析、转换、打包、优化
- 区分开发服务器与生产构建
- 对照路线图 module-bundlers 节点
bundler 做什么
入口 app/main.tsx
→ 静态分析 import 图
→ 经 loader/plugin 转 TS/JSX/SASS
→ 打包 chunk(代码分割)
→ 压缩、tree-shaking、hash 文件名
→ dist/ 或 .next/
| 阶段 | 目标 |
|---|---|
| 开发 | 快速启动、HMR 热更新 |
| 生产 | 体积小、缓存友好、按需加载 |
常见打包器定位
| 工具 | 典型场景 |
|---|---|
| Webpack | 历史项目、复杂 loader 链、企业定制 |
| Vite | 现代 SPA/SSR 开发体验(见 ft-vite) |
| Rollup | 库打包、Tree-shaking 精细(见 ft-rollup) |
| esbuild / SWC | 极速转译,常作底层引擎 |
| Next.js 内置 | 应用框架自带,抽象大部分配置 |
与 javascript-core 模块系统
js-modules 教你在源码里写 import;bundler 决定:
- 如何把
node_modules打进来 - 是否支持
import.meta.url、动态import() - 如何把 CSS、图片当模块处理
与 react / next 的关系
- react-essentials:
npm create vite默认用 Vite + Rollup(生产) - nextjs-essentials:不手写 webpack 配置,框架封装 Turbopack/Webpack
- typescript-essentials:
.tsx由 bundler 或tsc处理——Next 常交给 SWC/esbuild
选型直觉
- 应用:优先框架自带或 Vite
- npm 库:Rollup / tsup
- 遗留 Webpack 项目:渐进迁移,别一次性重写