Vue.js从零到精通系列(一):初识Vue——背景、环境与第一个应用

**摘要:**本篇文章是《Vue.js从零到精通》系列的开篇之作,我们将从Vue.js的前世今生讲起,深入理解它诞生的背景、设计理念与版本演进,帮助你建立对框架的宏观认知。随后,我们会手把手搭建基于Vite + TypeScript的开发环境,创建并剖析第一个Vue应用。通过本文,你将不仅学会"怎么做",更能明白"为什么这么做",为后续深入学习模板语法、组件化、路由和状态管理打下坚实基础。


一、Vue.js的前世今生

1.1 框架诞生的土壤:前端进化简史

在JavaScript诞生的最初十年,前端开发主要靠手动操作DOM。jQuery的出现大幅简化了DOM操作,但应用复杂度爆炸式增长后,这种"命令式"的写法让代码变得难以维护。2010年后,AngularJS率先将MVVM(Model-View-ViewModel)模式带入前端,让开发者体会到数据驱动视图的便利。但AngularJS的复杂性和性能问题也暴露了出来。随后,React携虚拟DOM和组件化思维横空出世,改变了整个生态。正是在这样的背景下,一个来自Google的华人工程师------尤雨溪(Evan You),决定创造一款更"轻、快、易用"的框架。

1.2 尤雨溪与Vue的诞生

2013年底,尤雨溪在业余时间开始动手编写一个实验性项目,他将AngularJS中自己最喜爱的部分(如声明式模板、双向绑定)提取出来,并配合一套极轻量的响应式系统,这就是Vue.js的雏形。2014年2月,Vue.js在GitHub上首次公开,当时的版本号是0.6。尤雨溪曾在采访中说,Vue的设计初衷就是"我想要的工具"------一个渐进式、可以自底向上逐层应用的框架。

为什么叫Vue? Vue是法语"视图"的意思,发音类似"view"。其核心定位就是视图层框架,专注解决用户界面构建的问题。

1.3 版本演进的三个阶段

  • Vue 0.x ~ 1.x(2014-2015) 初具MVVM形态,拥有指令、过滤器、组件等概念,但生态尚不完善。这一阶段主要吸引了喜欢AngularJS但想要更轻量方案的开发者。

  • Vue 2.x(2016-2022) 2016年9月,Vue 2.0"Ghost in the Shell"发布,引入了虚拟DOM、服务端渲染、完善的组件体系和官方路由(Vue Router)、状态管理(Vuex)。这个版本让Vue真正走向主流,成为GitHub上Star数增长最快的项目之一。许多耳熟能详的企业(阿里巴巴、百度、小米等)开始在生产环境中大规模使用Vue。

  • Vue 3.x(2020年至今) 2020年9月,代号"One Piece"的Vue 3正式发布。底层完全重写,采用TypeScript开发,引入了Composition API、Proxy响应式系统、Teleport、Fragments等新特性,性能大幅提升,代码组织更加灵活。同时保持良好的向下兼容性(通过@vue/compat迁移构建)。Vue 3代表了框架未来的发展方向,也是本系列教程的主力版本。

1.4 核心设计哲学:渐进式框架

Vue的最大特色是"渐进式"。你可以在已有项目中仅用Vue处理某个小部件,也可以将其作为完整的单页应用(SPA)框架使用。它的核心库只关注视图层,官方生态(路由、状态管理、构建工具等)则可以按需集成。这种"按需取用"的设计让Vue的学习曲线极其平滑,对新手非常友好。


二、为什么选择Vue?

2.1 简洁优雅的模板语法

Vue使用基于HTML的模板语法,允许你直接写符合W3C标准的HTML,并通过指令(如v-if、v-for)赋予它们动态能力。这种写法更接近传统网页开发,心智负担小。对于你已掌握的HTML知识,可以说无缝衔接。

2.2 自动化的响应式系统

Vue 2通过Object.defineProperty实现数据劫持,Vue 3则使用Proxy,当你修改数据时,视图会自动更新,无需手动调用setState$apply。这种"声明式渲染"让你只需关心数据本身,DOM操作完全由框架托管。

2.3 强大的组件系统

Vue的单文件组件(.vue)将模板、逻辑和样式整合在一个文件中,极大提升了代码的内聚性和可维护性。配合Scoped CSS和TypeScript,开发体验非常流畅。

2.4 繁荣的生态和中文社区

Vue拥有丰富的官方维护库:Vue Router、Pinia(状态管理)、Vite(构建工具)、Vue Devtools等。特别是中文文档极其完善、社区活跃,对于中文母语者来说,学习资源几乎没有障碍。


三、搭建开发环境

3.1 检查Node.js版本

打开终端,执行:

复制代码
node -v

确保版本在16.0以上。如果版本过低,建议使用nvm更新。

3.2 使用pnpm创建Vue+TypeScript项目

pnpm是你的老朋友了,我们用它来创建一个全新的Vue 3项目。

复制代码
pnpm create vite my-vue-app --template vue-ts
cd my-vue-app
pnpm install

等待依赖安装完成。上述命令创建了一个名为my-vue-app的文件夹,使用vue-ts模板(即Vue + TypeScript)。

3.3 项目结构一览

安装完毕后,你会看到如下目录结构:

复制代码
my-vue-app/
├── index.html            # 入口HTML文件
├── package.json          # 项目依赖与脚本
├── pnpm-lock.yaml        # pnpm锁文件
├── tsconfig.json         # TypeScript配置
├── vite.config.ts        # Vite配置文件
├── public/               # 静态资源(不会被编译)
└── src/
    ├── main.ts           # 应用入口
    ├── App.vue           # 根组件
    ├── style.css         # 全局样式
    └── vite-env.d.ts     # Vite环境类型声明

这个结构与你用过的其他前端脚手架(如create-react-app)非常类似。src目录是主战场,.vue单文件组件将是你编写最多的文件。

3.4 启动开发服务器

运行:

复制代码
pnpm dev

Vite会启动一个本地开发服务器,默认在http://localhost:5173。打开浏览器,你会看到Vue默认的欢迎页面。Vite的极速冷启动会让你立刻感受到现代构建工具的魅力。


四、第一个Vue应用:Hello, Vue 3!

现在,我们来剖析这个默认生成的代码,并亲手修改它。

4.1 入口起点:index.html

打开根目录的index.html,你会看到:

html 复制代码
<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>my-vue-app</title>
  </head>
  <body>
    <div id="app"></div>
    <script type="module" src="/src/main.ts"></script>
  </body>
</html>

关键点是<div id="app">------它将是Vue应用挂载的容器,以及通过type="module"引入的main.ts,这是整个应用的JavaScript入口。

4.2 应用入口:src/main.ts

TypeScript 复制代码
import { createApp } from 'vue'
import App from './App.vue'
import './style.css'
​
createApp(App).mount('#app')

createApp是Vue 3的核心函数,用于创建一个应用实例。.mount('#app')则将Vue应用挂载到id="app"的DOM元素上。整个流程非常简洁:导入Vue根组件,创建应用,挂载到容器。

4.3 根组件:src/App.vue

这是整个应用的起点,也是所有组件的根。打开这个文件:

TypeScript 复制代码
<script setup lang="ts">
import HelloWorld from './components/HelloWorld.vue'
</script>

<template>
  <HelloWorld />
</template>
​
<style scoped>

</style>

你可能会好奇:一个.vue文件里有三个块------<script setup><template><style scoped>,这正是Vue单文件组件的核心魅力。我们逐一解读:

  • <script setup lang="ts"> :这是Vue 3推荐的组合式API写法,setup语法糖让你以更简洁的方式编写组件逻辑,lang="ts"指定使用TypeScript。

  • <template> :声明式的模板,写入任何合法的HTML,Vue的编译器会将其转化为虚拟DOM渲染函数,组件中导入了HelloWorld子组件。

  • <style scoped> :带scoped属性的样式只作用于当前组件,不会污染全局。

4.4 修改代码:自己的问候

现在,让我们动手将默认内容改成自己的"Hello Vue"。编辑App.vue

html 复制代码
<script setup lang="ts">
// 这里暂时不需要逻辑
</script>
​
<template>
  <div class="container">
    <h1>{{ greeting }}</h1>
    <p>欢迎来到 Vue 3 的世界</p>
  </div>
</template>
​
<script lang="ts">
// 我们也可以使用普通<script>块
export default {
  data() {
    return {
      greeting: 'Hello, Vue 3!'
    }
  }
}
</script>
​
<style scoped>
.container {
  text-align: center;
  margin-top: 60px;
  font-family: 'Arial', sans-serif;
}
h1 {
  color: #42b883;
}
</style>

保存文件,浏览器会自动热更新,显示"Hello, Vue 3!"。注意我们在模板中使用了双花括号{``{ greeting }},这是Vue的插值语法 ,它会将数据对象中的greeting值渲染到视图中。我们通过data()函数返回一个对象,该对象会被Vue的响应式系统接管。当greeting发生改变时,视图会自动更新------这就是响应式最基本的体现。

4.5 理解Vue实例与挂载

每个Vue应用都是从创建一个应用实例开始的。createApp接收一个根组件对象,返回一个应用实例。该实例有mount方法,可以将其挂载到真实的DOM容器上。实例还提供usecomponentdirective等API,允许你全局注册插件、组件和指令。这种设计将"应用"和"视图"解耦,使得测试和SSR更加方便。


五、模板语法初探

5.1 插值

TypeScript 复制代码
<span>Message: {{ msg }}</span>

双花括号内可以放入JavaScript表达式,例如:

TypeScript 复制代码
<p>{{ number + 1 }}</p>
<p>{{ ok ? 'YES' : 'NO' }}</p>
<p>{{ message.split('').reverse().join('') }}</p>

5.2 指令

指令是带有v-前缀的特殊属性,其值应为JavaScript表达式。Vue提供了大量内置指令,用声明式的方式完成DOM操作。

  • v-bind :动态绑定HTML属性。简写为:
TypeScript 复制代码
<img v-bind:src="imageSrc" />
<a :href="url">链接</a>
  • v-if / v-else-if / v-else:条件渲染。
TypeScript 复制代码
<p v-if="score >= 90">优秀</p>
<p v-else-if="score >= 60">及格</p>
<p v-else>不及格</p>
  • v-for:列表渲染。
TypeScript 复制代码
<li v-for="item in items" :key="item.id">
  {{ item.text }}
</li>
  • v-on :监听DOM事件。简写为@
TypeScript 复制代码
<button v-on:click="handleClick">点击我</button>
<button @click="count++">增加</button>
  • v-model:表单输入双向绑定。
TypeScript 复制代码
<input v-model="username" placeholder="输入用户名" />
<p>你的用户名是: {{ username }}</p>

5.3 组件使用

我们已经在App.vue中使用了HelloWorld组件。组件标签可以是大写开头(PascalCase)或连字符形式(kebab-case),在模板中都能识别。Vue的组件系统是构建可复用UI的基石。


六、总结

通过这篇文章,你已完整了解了Vue.js的诞生背景、版本演进和"渐进式框架"的设计理念。我们使用pnpm和Vite搭建了Vue 3 + TypeScript的开发环境,仔细剖析了第一个Vue应用的每个文件,并亲手修改出了自己的"Hello Vue"。此外,我们还初探了插值和指令等模板语法核心。

  • Vue由尤雨溪在2014年创建,以轻量、易用和渐进式著称。

  • Vue 3基于TypeScript重写,使用Proxy实现响应式,带来了Composition API。

  • 项目结构清晰,单文件组件(.vue)集模板、逻辑、样式于一体。

  • createApp(App).mount('#app')是每个Vue应用的启动模式。

  • 模板语法以声明式为主,指令和插值让你专注于数据,而非DOM。


如果这篇文章帮你解决了实操上的困惑,别忘记点击点赞、分享 ,也可以留言告诉我你遇到的其它问题,我会尽快回复。动手练习是掌握编程最快的方法,请务必亲手敲一遍本文的所有示例代码,并截图保存你的成果。你的关注是我坚持原创和细节共享的力量来源,谢谢大家。

相关推荐
大大杰哥2 小时前
Vue2学习(1)--了解基本方法与概念
javascript·学习·vue
云水一下2 小时前
Vue.js从零到精通系列(二):响应式核心——ref、reactive、computed与watch
前端·javascript·vue.js
放下华子我只抽RuiKe52 小时前
FastAPI 全栈后端(二):路由与数据模型
前端·人工智能·react.js·前端框架·html·fastapi
lichenyang4532 小时前
ArkTS 严格类型系统:我答错 2 道题后才真正搞懂的几条规则
前端
小小小小宇2 小时前
定高、不定高、瀑布流虚拟列表
前端
天启HTTP2 小时前
开启全局代理后网络变慢,问题出在哪
开发语言·前端·网络·tcp/ip·php
卡布鲁3 小时前
Webpack 核心原理与自定义 Loader/Plugin 实战
前端·javascript
小林ixn3 小时前
从拼多多手机号验证到模板引擎:深入正则表达式与 JS 字符串处理
开发语言·javascript·正则表达式
智码看视界3 小时前
Web Storage 的无障碍实践与工程化应用
前端·javascript·web