Webpack 和 Vite 的核心区别在于开发服务方式:Webpack 全量打包后启动,热更新慢;Vite 按需编译、原生 ESM 支持,冷启动与热更新均更快。
JavaScript 构建工具是把源代码转换成浏览器可运行、生产环境可用的静态资源的一类工具。Webpack 和 Vite 都属于这一类,但它们的设计思路、运行机制和适用场景差异明显——核心区别不在“能不能打包”,而在“怎么服务开发过程”。
Webpack 在开发时必须先解析整个项目依赖图,再打包出 bundle(比如 main.js),然后启动服务器。哪怕只改一行代码,热更新(HMR)也常要重新处理关联模块,项目越大,等待越明显。
Vite 则跳过预打包:启动时只做轻量初始化,浏览器请求哪个模块,Vite 就即时编译哪个模块。修改文件后,它只重编译该文件+通知浏览器局部刷新,响应几乎与项目规模无关。
Webpack 是典型的 bundler(打包器):把所有 JS、CSS、图片等资源,通过 loader 转换、plugin 注入逻辑,最终输出若干个 bundle 文件。它解决的是“如何让旧版浏览器跑模块化代码”的历史问题。
Vite 是 dev-server-first 的构建系统:开发阶段完全依赖浏览器原生 ESM,不生成 bundle;生产构建才用 Rollup 打包,目标是体积小、tree-shaking 更干净。
Webpack 配置粒度极细,从 entry、output 到 resolve.alias、optimization.splitChunks,都靠手动定义。灵活性强,但也容易配置过载或踩坑。
Vite 默认开箱即用,vite.config.ts 里通常只需覆盖少数字段(如 base、resolve.alias、plugins)。它的插件 API 借鉴 Rollup,但生态仍在追赶 Webpack 的广度和深度。
没有绝对优劣,只有是否匹配当前阶段的需求:
护、需要兼容 IE、构建流程深度定制、已有大量 webpack 插件积累 → 继续用 Webpack