本节摘要:前端框架是一套提供了组件化、数据绑定、生命周期等结构性约定,并对应用"整体架构"拥有控制权的软件体系;库则是一组可调用的工具函数。判断标准是控制反转:框架调用你的代码,你调用库。本节给出可操作的定义,拆解框架的四大作用与五大优势,并指出"框架 vs 库"标签在选型中的实际意义——它决定你要为结构付出多少学习成本。
阅读完本节,你应当能够:
你第一次听到"React 是个库,不是框架"时,多半会愣一下——它不是号称前端三巨头之一吗?这个争论不是文字游戏。它背后是真实的工程取舍:React 只负责"渲染 UI"这一层,路由要另装、状态管理要另装、HTTP 请求要另装;Angular 则把路由、表单、HTTP、DI 全部打包好给你。 前者给你自由,也给你做决定的负担;后者替你做了大部分决定,代价是你得按它的规矩来。
这就是本节要解决的直觉问题:框架和库不是"大小"的区别,而是"谁拥有控制权"的区别。搞懂这一点,你才能理解为什么有人吐槽 React 生态"选择太多",也有人抱怨 Angular"太笨重"——他们在说的是同一件事的两面。
库(Library):一组封装好的函数或类,你在自己的代码里按需调用。比如你在页面里 $() 选中元素、绑定事件,用的是 jQuery;用 axios 发请求,用的是 axios。你掌控流程,库是工具。
框架(Framework):一套规定应用整体结构的软件骨架。你写代码的方式由框架决定——组件怎么组织、数据怎么流动、生命周期钩子在哪里插入。最关键的判断标准是控制反转(Inversion of Control):框架调用你的代码,而不是你调用框架。
打个比方:库像工具箱,你决定什么时候用扳手、什么时候用螺丝刀;框架像房子的承重结构,你搬进去之后,墙的位置和承重逻辑已经定死了——你只能在它允许的范围内装修。

这个判定流程把"库还是框架"从概念之争变成了一道选择题:看控制权在谁手里。判断的落点不是标签本身,而是它带来的工程含义——是"自由拼装"还是"遵守约定",这直接决定团队要为结构付出多少学习成本。第 2 章分析各框架时,我们反复使用这个判定。
| 优势 | 机制 | 直观收益 |
|---|---|---|
| 开发效率 | 组件复用、预设工具 | 同样的功能更少代码 |
| 代码组织 | 组件/模块化 + 数据流 | 结构清晰、易维护 |
| 生态支持 | 大量第三方库与方案 | 少造轮子,快速找解 |
| 性能基线 | 虚拟 DOM、编译优化 | 交互流畅、白屏更短 |
| 团队协作 | 统一范式与目录约定 | 新人上手快、集成顺 |
💡 关键直觉:框架的价值不是"帮你少写代码",而是"帮你把代码写得有组织"。少写代码是副产品,组织性才是主产品。
React 官方定位是"构建用户界面的库"。好处是灵活:你自由挑选路由、状态管理、数据请求方案,定制化程度高;坏处是选择负担大——新手常被 Redux、MobX、Zustand 的排列组合搞懵。它用"少一点结构"换"多一点自由"。
Vue 的聪明之处在于不逼你选边。核心库当库用——在旧页面里绑个 v-model 管一个小模块;需要时再逐步引入 Vue Router、Pinia、构建工具,升级成完整框架。它的定位是"从库到框架的一条平滑斜坡",而不是"要么全有要么全无"。
Angular 从第一行代码就是完整的框架:TypeScript 强制、依赖注入内置、路由表单 HTTP 全套配齐。它的哲学是"约定优于配置"——结构统一、规范强,大型团队协作省心;代价是灵活性低、包体积大、学习曲线陡。
| 你的真实问题 | 对应到框架/库 |
|---|---|
| 只要一个组件管状态,不想动架构 | 用库级方案(如 Vue 核心) |
| 中型应用,希望快速起步 | 完整框架或"库+官方配套" |
| 大型团队,要强规范 | 完整框架(Angular 系) |
| 极简 UI,不想被框架绑架 | 纯 Web Components |
| 需要自由拼装技术栈 | 库级方案(React 系) |
⚠️ 常见坑:把"完整框架"和"好"划等号。对 3 个人的小项目,Angular 的规范是负担不是资产。结构密度要与团队规模、项目复杂度匹配,而不是与个人偏好匹配。
如何在具体技术栈里识别"谁在控制"?给你三个信号。信号一:入口是谁写的。你的代码里有一个 <App /> 被框架的渲染函数接收,而路由、启动、挂载这些"框架工作"由框架自己调度——说明框架在控制。信号二:扩展点长什么样。框架提供"钩子"(生命周期钩子、插件接口、中间件)让你在特定时机插入逻辑,而不是让你随便改写它的内部流程——这是框架型设计。信号三:升级会不会牵连你。库升级通常只影响你调用的那部分函数,框架升级却可能改变整套约定——AngularJS 到 Angular 的大版本重写、React 类组件到 Hooks 的范式迁移,都是框架级变更的活教材。抓住这三个信号,你在任何技术面试或选型讨论里都能快速判断对方说的是"库还是框架"。
现实世界没有干净的二分类。Vue 核心库在"当库用"和"当框架用"之间平滑过渡,React 生态也常常被整体当成"React 框架"来看待。与其纠结标签,不如用一个连续谱系来思考:谱系的一端是"极简函数库"(如 lodash),另一端是"全规格框架"(如 Angular),中间排布着 jQuery 这类 DOM 库、React 这类渲染库、Vue 这类渐进框架。选型时你在谱系上找一个点:这个点的位置,取决于你愿意为"结构"付出多少控制权,又需要多少自由。把这个谱系画在纸上,你会发现所谓"框架之争"其实只是大家在谱系不同位置上站队。
把抽象原则落到实际项目上,这里做三个典型练习。项目甲:一家创业公司的营销官网,五个页面、几乎无交互、SEO 是硬指标——它在谱系上应该偏向"轻"的那端,甚至可以考虑 Astro 这类内容优先方案,根本不需要完整框架。项目乙:一家银行的后台风控系统,五十人团队、五年生命周期、强类型强规范要求——它应该偏向"重"的那端,Angular 或"React + 严格规范"都成立。项目丙:一个独立开发者的数据可视化工具,单人维护、追求快速迭代——它落在中间偏轻的位置,Vue 的渐进式或"React + Vite + Zustand"都很合适。做这个练习的关键不是得出唯一正确答案,而是强迫你把"需要多少结构"显式化——一旦显式化,很多争论会自动消解。
选型讨论里最容易犯的错,是把顺序搞反:先定一个"喜欢"的框架,再为它找理由。这种路径的隐蔽之处在于,理由总能找到——React 生态大、Vue 好学、Angular 规范,随便挑一个都有正经理由。但真正的问题是:你没有先定义"项目需要什么",就让偏好先入了场。要破这个局,最有效的动作是"先写约束清单再开框架会":把项目规模、团队技能、SEO 需求、维护周期、预算约束列成一张纸,让所有人对这张纸达成一致之后,才允许进入"哪个框架更合适"的讨论。你会发现,约束清单一旦写清楚,候选框架通常会自动收敛到两三个,剩下该争论的,就是这两三个之间的真实差异,而不是空对空的喜好之争。这个流程正是第 4 章方法论的核心,这里先埋下伏笔。
前面讲了一堆理论,这里给一个每个人都能立刻做的验证方法:拿同一个极简需求(比如"一个输入框 + 一个列表 + 一个删除按钮"),用你候选的框架各写一遍,记录三项数据——写完需要多久、查了多少次文档、代码行数是多少。半小时的对比实验,比十篇对比文章都更能让你认清两件事:这个框架的直觉与你的思维模式是否契合,以及它的文档与报错对新手是否友好。实验时别追求写得对,追求"卡在哪、卡几次"——卡点才是真实的学习曲线。这套"小成本验证"的方法,本质就是第 4 章 POC(概念验证)的最小版,现在先用起来,你会少踩很多"看起来喜欢、上手想哭"的坑。
下一节进入框架的"零件层":虚拟 DOM、数据绑定、生命周期、响应式——这四个概念是理解所有框架差异的最小单元。