一、Vue.js 概述与核心哲学

Vue.js(通常简称为 Vue,读音类似 /vjuː/,同 view)是一个用于构建用户界面的渐进式 JavaScript 框架。它由华裔工程师尤雨溪(Evan You)于 2014 年创建,如今已成为全球最流行的前端框架之一,与 React 和 Angular 并称为“前端三驾马车”。

vue官网:https://cn.vuejs.org/

1. 四大核心设计理念

Vue 之所以备受开发者青睐,主要源于以下几个核心设计思想:

  • 渐进式框架 (Progressive)

    “渐进式”意味着 Vue 的核心库只关注视图层

    • 小微项目:你只需要把 Vue 当作一个轻量级的库来引入(类似 jQuery 挂载 CDN);

    • 复杂项目:你可以逐步引入 Vue Router(路由)、Pinia(状态管理)以及 Vite(构建工具),演进为全功能的大型单页应用(SPA)。它绝不会强迫你一次性引入所有复杂的概念。

  • 声明式渲染 (Declarative)

    Vue 采用了声明式编程范式。你只需要在 HTML 模板中声明数据与视图的映射关系,当 JavaScript 中的数据发生变化时,Vue 会自动更新 DOM(网页内容),开发者无需手动编写繁琐的、易错的 DOM 操作代码。

  • 组件化开发 (Component-Based)

    Vue 允许开发者将网页拆分为一个个独立、可复用的“组件”。每个组件都包含自己的 HTML 模板、CSS 样式和 JavaScript 逻辑。

  • 单文件组件 (SFC, Single File Component)

    Vue 独创了 .vue 文件格式,允许把 <template><script><style> 写在同一个文件中。这种高内聚的模式极大地提高了开发效率和代码的可维护性。

2. Vue 3 核心技术栈生态

一个现代化的 Vue 企业级项目,通常会包含以下官方推荐的生态工具:

工具名称 功能定位 核心简介
Vue Core 核心框架 负责基础的响应式数据绑定、虚拟 DOM 渲染和组件系统。
Vue Router 官方路由管理器 负责处理单页应用(SPA)中的页面跳转、路由守卫与 URL 映射。
Pinia 状态管理库 负责在多个组件之间共享和管理全局数据(Vue 3 官方推荐,取代 Vuex)。
Vite 构建工具 下一代的前端开发与打包工具,基于浏览器原生 ESM,速度极快。

3. Vue 2 与 Vue 3 的划时代区别

目前前端主流使用的是 Vue 3(Vue 2 已于 2023 年底停止官方维护)。相比 Vue 2,Vue 3 带来了底层的巨大飞跃:

  1. 组合式 API (Composition API):彻底解决了 Vue 2 选项式 API(Options API)在大项目中代码逻辑分散、反复横跳的问题,让代码复用(Custom Hooks)和业务组织更加灵活。

  2. 更好的 TypeScript 支持:Vue 3 源码本身就是用 TypeScript 重写的,类型推导极其完美。

  3. 更快的速度、更小的体积:采用了更高效的 Proxy 响应式系统,并配合编译器做了大量静态标记(Patch Flags)优化。

二、三大核心底层机制

要真正掌握 Vue 3,必须理解它在内存和底层是如何驱动视图的。其核心机制主要由 MVVM 模式Proxy 响应式系统虚拟 DOM ”三驾马车”协同完成。

1. MVVM 架构模式

在传统的 JavaScript(比如 jQuery)中,我们要修改网页内容,需要先在网页中通过选择器找到特定的 DOM 节点,然后把数据硬塞进去。这种模式叫 命令式驱动 DOM,代码写起来非常繁琐且难以维护。

Vue 采用了 MVVM(Model-View-ViewModel) 架构,将数据与视图彻底解耦:

  • M (Model - 模型):纯粹的 JavaScript 数据对象,例如从后端 Python/Node.js API 异步获取到的工单、用户信息的 JSON 数据。

  • V (View - 视图):由 HTML/CSS 构成的页面,负责向用户展示界面。

  • VM (ViewModel - 视图模型):这是 Vue 的内核所在。它像一个双向胶水,把 Model 和 View 牢牢粘在一起,包含两个核心方向:

    1. 数据绑定(Data Binding):只要 Model(数据)一变,VM 会自动把新数据同步到 View(网页)上。

    2. 事件监听(DOM Listeners):用户在 View(网页)上点击了按钮或者输入了文字,VM 会自动捕捉到这个动作,并触发 JS 逻辑去修改 Model(数据)。

2. 基于 Proxy 的响应式数据绑定

“响应式”的意思是:只要数据发生改变,视图(网页)会自动做出响应并重新渲染。

在 Vue 3 中,这种响应式是通过 JavaScript 原生的 Proxy(代理)实现的。Vue 会用这个“监控器”把你的普通数据包裹起来。当你修改数据时,Proxy 会拦截这个行为,立刻通知 Vue 进行依赖更新。

对比传统 JS 与 Vue 3 响应式:

  • 传统 JS

    let price = 20; 
    // 网页毫无反应,除非你手动执行:
    document.getElementById('price-tag').innerText = price;
    
  • Vue 3 响应式

    const price = ref(20); 
    price.value = 30; // 网页上所有用到 price 的地方会自动瞬间变成 30
    

3. 虚拟 DOM(Virtual DOM)与 Diff 算法

假设网页上渲染了一个包含 1000 个工单 的复杂列表,其中仅仅第 5 个工单的状态从“待处理”变成了“处理中”。

  • 传统做法:浏览器把整个包含 1000 个列表的网页真实 DOM 节点全部拆掉,重新销毁并构建一遍。这种对“真实 DOM” 的直接操作极其消耗操作系统的性能,会导致网页明显的卡顿与掉帧。

  • Vue 的虚拟 DOM 做法

    1. 内存复制:Vue 在内存里用轻量级的 JS 对象(VNode)复制了一个“假网页”(这就是虚拟 DOM)。

    2. 脏检查与对比:当数据变动时,Vue 先在内存里生成一个新的虚拟 DOM。然后利用 Diff 算法 把“新虚拟 DOM”和“老虚拟 DOM”进行快速、高效的同层对比。

    3. 精准打击:对比完后,算法精准定位出:“哦,只有第 5 个工单的状态文字变了,其他 999 个工单完全没变。”

    4. 最小化更新:最后,Vue 只去真实网页里修改那唯一一个发生变动的标签(Patch 阶段)。

通过这套机制,Vue 保证了无论业务数据如何高频变动,前端页面都能维持极高的渲染性能与丝滑的交互体验。

三、使用vite创建项目

使用 Vite 创建 Vue 3 项目非常高效。Vite 的速度极快,是目前vue前端开发的主流构建工具。

下面我将一步步带你创建项目,并详细解释过程中每一个选项的含义。

第一步:执行创建命令

在终端(Terminal)中,进入你想要存放项目的文件夹,然后运行以下命令:

npm create vue@latest

![[Pasted image 20260604181328.png]]

注意:这个命令会下载并运行官方的 create-vue 工具,它是基于 Vite 来定制 Vue 项目的官方脚手架。

第二步:配置选项详解

运行命令后,系统会提示你输入项目名称,随后会有一系列的配置问答。以下是每个选项的详细含义和选择建议:

1. Project name (项目名称)
  • 含义:你的项目文件夹名称。

  • 默认值vue-project

  • 建议:直接输入你想取的项目名(如 my-vue3-app),或者直接回车使用默认值。

![[Pasted image 20260604181447.png]]

2. Add TypeScript? (添加 TypeScript 支持吗?)
  • 含义:是否在项目中使用 TypeScript (TS)。TS 是 JavaScript 的超强版,加入了静态类型检查。

  • 选项No / Yes

  • 建议:如果你只是练手或刚开始学 Vue 3,选 No;如果是公司正规项目或想提升代码健壮性,强烈建议选 Yes(Vue 3 本身就是用 TS 写的,对 TS 支持极好)。
    ![[Pasted image 20260604181559.png]]

3. 功能选择

![[Pasted image 20260604181755.png]]

Add JSX Support? (添加 JSX 支持吗?)
  • 含义:是否允许在 Vue 中写 JSX/TSX 代码(类似 React 的写法),而不是传统的 <template> 模版。

  • 选项No / Yes

  • 建议:选 No。除非你有很强的 React 背景或者特殊需求,否则 Vue 官方更推荐使用结构更清晰的 <template> 语法。

Add Vue Router for Single Page Application development? (添加路由支持吗?)
  • 含义:是否安装 Vue Router。它是用来实现单页面应用(SPA)页面跳转的(比如从“首页”跳到“关于我们”而不需要刷新浏览器)。

  • 选项No / Yes

  • 建议:选 Yes。绝大多数项目都需要做页面跳转。

Add Pinia for state management? (添加 Pinia 进行状态管理吗?)
  • 含义:是否安装 Pinia。它是 Vue 3 官方推荐的全局状态管理库(用来替代老旧的 Vuex)。当你的项目很大,多个组件需要共享和修改同一份数据(比如登录的用户信息、购物车商品)时会用到。

  • 选项No / Yes

  • 建议:中大型项目选 Yes;如果只是写个简单的单页小 Demo,可以选 No

Add Vitest for Unit Testing? (添加 Vitest 进行单元测试吗?)
  • 含义:是否引入 Vitest 测试框架。用来编写单元测试,确保你的单个函数或组件运行逻辑正确。

  • 选项No / Yes

  • 建议:普通开发或初学者选 No;注重测试驱动开发(TDD)的规范项目选 Yes

Add an End-to-End (E2E) Testing Solution? (添加端到端测试方案吗?)
  • 含义:是否引入端到端测试。模拟真实用户在浏览器上的点击和输入操作,可选 Cypress、Playwright 或 Nightwatch。

  • 选项No / Cypress / Playwright / Nightwatch

  • 建议:选 No。初期不需要,后续有需求可以随时手动加。

Add ESLint for code quality? (添加 ESLint 进行代码质量检查吗?)
  • 含义:是否引入 ESLint。它是一个代码检查工具,用来规范代码格式(比如不能有错别字、没用的变量、漏掉的分号等),不符合规范编译会报错。

  • 选项No / Yes

  • 建议:强烈建议选 Yes。虽然刚开始可能觉得它天天报错很烦,但它能帮你养成良好的代码习惯,避免很多低级 Bug。

Add Prettier for code formatting? (添加 Prettier 进行代码格式化吗?)
  • 含义:是否引入 Prettier。配合 ESLint 使用,一键保存就能自动把你的代码排版得整整齐齐(比如自动缩进、给双引号改单引号等)。

  • 选项No / Yes

  • 建议:选 Yes。配合Prettier 插件,写代码体验极佳。
    ![[Pasted image 20260604182329.png]]

第三步:启动项目

配置完成后,终端会提示你后续的命令。你只需要依次输入以下三行命令即可:

# 1. 进入你刚刚创建的项目文件夹(把 my-vue3-app 换成你实际的项目名)
cd my-vue3-app

# 2. 安装项目依赖(下载 node_modules)
npm install

# 3. 启动本地开发服务器
npm run dev

![[Pasted image 20260604182620.png]]

看到终端输出 Local: http://localhost:5173/ 类似字样时,按住 Ctrl (或 Cmd) 并点击该链接,就能在浏览器中看到你的 Vue 3 项目首页了!

![[Pasted image 20260604182647.png]]

四、vue项目结构:代码到底写在哪?

当你用 Vite 创建好项目并用编辑器打开时,你会看到左侧有一堆文件。真正需要你关心的,只有 src(源代码) 文件夹。

我们来看看最核心的几个文件是干嘛的:

my-vue3-app/
├── node_modules/       # 依赖包(放一堆工具的地方,不用管)
├── public/             # 静态资源(放不需要编译的图标、图片,初学不用管)
├── src/                # ⭐⭐⭐ 你的核心工作区!你的代码全写在这里
│   ├── assets/         # 存放图片、样式表(CSS/Sass)
│   ├── components/     # 存放“小零件”(重复使用的公共组件)
│   ├── App.vue         # ⭐ 根组件(房子的“大厅”,所有页面的大总管)
│   └── main.ts / js    # 入口文件(负责把 Vue 挂载到浏览器上的“大门”,不用改它)
├── index.html          # 单页面应用的HTML外壳(不用改它)
├── package.json        # 项目配置文件(记录项目名字和用了什么插件)
└── vite.config.ts / js # Vite 的配置文件(之前提过加插件的地方)

核心结论:
你刚开始写练习代码时,99% 的时间都在 src 文件夹里折腾。而最直接的演练场,就是 src/App.vue

更多推荐