打包工具

前端打包工具概览(Vite/Webpack/Rollup/tsup)

#tech / dev / frontend #type / concept #status / growing

打包工具

[!info] related notes


基础概念

前端打包工具是现代 Web 开发的重要基础设施,它们围绕模块化、资源转换、产物优化和开发体验提供能力。

打包工具的功能主要包括:

  1. 构建依赖图:从入口出发分析模块之间的引用关系。
  2. 资源转换:把 TypeScript、CSS、图片等资源处理成浏览器可用形式。
  3. 产物优化:做压缩、拆包、Tree Shaking、缓存友好输出等优化。
  4. 开发支持:提供本地开发服务器、热更新、代理等能力。

常见理解入口

经验总结

打包构建工具的本地开发环境的搭建(类似Vite)

就是开发一个「开发服务器」

  1. 通过编译工具来资源转换、依赖分析、转换代码生成静态资源。还有其他代码优化等。
  2. 将打包编译好的静态资源发送给本地开发服务器

参考

B 站教学视频

面试要点

来自 dependency-selection-interview-question 的面试视角整理。

一句话回答

我选依赖时看四点:是否解决明确问题、是否和现有技术栈兼容、是否能减少长期维护成本、团队能不能真正消化。选型不是追新,而是让工具复杂度刚好匹配项目复杂度。

选型原则

四个判断维度

  1. 是否解决明确问题:不是为了”流行就上”,而是有具体痛点
  2. 兼容性:和现有技术栈、构建流程、团队技能是否匹配
  3. 长期维护成本:社区活跃度、API 稳定性、升级路径是否清晰
  4. 团队消化能力:学习曲线是否合理,团队能否真正用起来

实际案例

为什么选 Nx

  • 问题:多应用(Web、Desktop、API)多包协作,影响分析和任务编排成本高
  • 方案:Nx 提供依赖图、affected 增量执行、统一任务调度
  • 收益:CI 只跑受影响项目,反馈速度明显提升

为什么选 Vite

  • 问题:开发期冷启动和热更新体验需要提升
  • 方案:Vite 基于原生 ESM,开发期不打包,按需编译
  • 收益:冷启动秒级,HMR 几乎即时,和 Vue 3 集成成熟

为什么选 Pinia

  • 问题:需要轻量、类型友好的状态管理
  • 方案:Pinia 是 Vue 官方推荐,API 简洁,TS 支持好
  • 收益:状态层职责清晰,和 composable 分工明确

为什么做统一 HTTP client

  • 问题:每个模块自己处理鉴权、超时、错误映射,代码散且行为不一致
  • 方案:抽 ResultHttpClient 统一处理
  • 收益:鉴权、错误语义、可观测性集中治理

面试回答主线

如果问”你怎么选技术栈”

我不会因为某个技术新就用它。首先看项目实际需要什么能力,然后看候选方案能不能解决这个具体问题,再看和现有栈的兼容性、社区维护情况,最后评估团队能不能消化。选型的核心是让工具复杂度刚好匹配项目复杂度,而不是过度设计。

如果问”Vite 和 Webpack 你怎么选”

新项目优先 Vite,开发体验好、配置简单、生态成熟。但如果项目历史包袱重、构建链很深(比如大量自定义 loader/plugin、特殊产物处理),Webpack 的生态和定制能力依然有优势。不是一刀切,而是看项目阶段和复杂度。

常见误区

只说”因为它快/流行”

要补上”解决了什么具体问题、有什么代价、为什么不选另一个”。

不考虑团队因素

再好的工具,如果团队用不起来,长期维护成本反而更高。

最短记忆方式

选型 = 明确问题 + 兼容性 + 长期成本 + 团队消化 + 复杂度匹配

创建于 2025/1/1 更新于 2026/5/27