前端架构基础:Vue、SPA、MPA与项目入口理解

8 阅读4分钟

Vue、SPA、MPA,我曾经以为它们是一回事

很多人刚接触 Vue 就会形成一个误解:用了 Vue = 做的是 SPA。 其实这三个概念分属不同层次。这篇文章来帮你彻底分清楚。


🤔 先说一个很常见的误解

当我第一次看到 Vue 项目时,我以为:

"Vue 框架 = 做的就是 SPA(单页应用)"

后来才知道这是错的。

Vue 是工具;SPA / MPA 是架构选择。

就像"用了锤子 ≠ 只能盖砖房"一样。


三个概念,分开定义

Vue 是什么?

Vue 是一个前端框架,用来做:

  • 组件化开发
  • 数据绑定
  • 状态管理
  • 路由协作

它只是工具层面的东西,本身不决定你做的是 SPA 还是 MPA。


SPA 是什么?

SPA = Single Page Application(单页应用)

核心特征:

✅ 通常只加载一个 HTML 壳
✅ 页面切换主要靠前端路由(不整页刷新)
✅ 状态和布局在前端统一维护
✅ 用户体验流畅,切页无感知

你进一个后台管理系统,左边菜单点一点,右边内容换了,但浏览器没整页刷新——这就是 SPA 的体验。


MPA 是什么?

MPA = Multi Page Application(多页应用)

核心特征:

✅ 一个站点有多个独立页面入口
✅ 页面跳转通常整页刷新(像传统网站)
✅ 每个页面相对独立
✅ 更利于 SEO 和首屏加载

你打开一个新闻网站,点一条新闻跳过去,地址栏变了,整个页面重新刷新——这就是 MPA 的体验。


🎯 Vue 可以做 SPA,也可以做 MPA

Vue 被用在很多场景里:

场景说明
SPAVue CLI 默认创建的项目就是这种
MPA通过 vue.config.js 配置 pages 多入口
SSRNuxt.js 等方案
老系统局部组件只在某个区域引入 Vue
微前端子应用Vue 作为微前端子应用框架

所以,用了 Vue ≠ 一定是 SPA

你之所以会有"Vue = SPA"的感觉,是因为 Vue CLI 默认创建出来的项目就是 SPA 形态,看多了自然就建立了这个印象。


🏢 SPA 和 MPA 各适合什么项目

SPA 更适合:

✅ 后台管理系统(CRM、ERP、OA 等)
✅ 即时聊天工作台
✅ 需要登录才进入的系统
✅ 页面之间有大量共享状态
✅ 交互复杂、切换频繁
✅ 希望保留页面状态(筛选条件、表单草稿)

MPA 更适合:

✅ 企业官网
✅ 新闻/内容站
✅ 活动宣传页
✅ 落地页
✅ SEO 要求高的场景
✅ 页面之间相互独立、几乎没有共享状态

一句口诀

后台系统、强交互、统一壳、状态多    → SPA
内容展示、页面独立、SEO 重要         → MPA

🔎 为什么当前这个项目是 SPA

判断一个项目是不是 SPA,不是看有没有 index.html(那只是模板文件),而是看它有没有这些特征:

✅ 单入口

// src/main.js
new Vue({
  router,
  store,
  render: h => h(App),
}).$mount('#app');

只有一个根实例,说明整个应用是单入口的。


✅ 单根壳

<!-- src/App.vue -->
<router-view />

App.vue 只有一个路由出口,整个应用都从这里走。


✅ 后台壳继续承接路由

Home.vue 里,菜单栏、顶部栏、标签页是"壳",业务页面通过 router-view 填进来。

这意味着用户切页面时,壳不动,只有内容区域切换——SPA 的标志性体验。


✅ 前端路由统管页面切换

// src/router/index.js
// 路由决定页面,不依赖后端返回 HTML

页面切换是前端完成的,不是每次重新请求一个独立 HTML。


✅ 没有多入口配置

// vue.config.js
// 没有 pages 字段 → 不是多页项目

如果要做 MPA,需要在 vue.config.js 里配置 pages: { ... } 指定多个入口。项目里没有这个配置,说明它是单页项目。


🧩 public/index.html 不能证明是 SPA

public/index.html 只是构建工具生成最终 HTML 时用的模板文件

它的作用:

  • 提供 HTML 骨架
  • 提供挂载点 <div id="app"></div>
  • 构建时会自动注入打包后的 JS 和 CSS

SPA 有它,某些 MPA 的入口也有类似文件。

只看这一个文件,无法判断架构。


🔄 理解这条核心链路

public/index.htmlHTML 壳(模板)
  ↓
src/main.js            → 创建根实例,启动整个应用
  ↓
src/App.vue            → 总路由出口
  ↓
src/views/Home.vue     → 后台布局壳(菜单、顶栏、标签页)
  ↓
<router-view>          → 当前路由对应的业务页面

每一层都有自己的职责:

层级职责
main.js启动应用,注册插件、路由、状态
App.vue总出口,把路由页面放出来
Home.vue后台布局壳,维护菜单、顶栏、标签
router-view显示当前路由对应的具体页面

🏁 最终结论

Vue 是框架,不等于 SPA。
SPA 是单页应用形态,MPA 是多页应用形态。

判断是不是 SPA,要看:
  - 单入口 ✅
  - 前端路由切页 ✅
  - 共享布局壳 ✅
  - 状态共享 ✅

当前这个项目具备所有 SPA 特征,
是一个非常标准的 Vue2 SPA 后台管理系统。

这是 Vue2 学习系列第五篇。

学习这件事,贵在持续输出。每弄明白一个点,就写下来。 写下来,才是真的弄明白了。