Vue.js简介与环境搭建
每一段伟大的旅程都始于第一步。今天,我们就来迈出Vue.js学习之旅的第一步。
一、Vue.js的诞生:一个程序员的"周末项目"
2013年的某个周末,Google工程师尤雨溪(Evan You)萌生了一个想法:能不能创造一个框架,既有Angular的数据绑定能力,又像React一样轻量灵活?于是,Vue.js诞生了。
有趣的是,Vue这个名字取自法语"vue",意为"视图"。尤雨溪希望这个框架能帮助开发者更直观地处理视图层。谁能想到,这个"周末项目"如今已成为全球最受欢迎的前端框架之一,GitHub星标超过18万,仅次于React。
Vue.js的核心特性
1. 渐进式框架——像搭积木一样学习
Vue最迷人的地方在于它的"渐进式"设计理念。什么意思呢?想象你在玩乐高积木:
- 你可以从最简单的一块积木开始(只用Vue的核心库做简单的数据绑定)
- 慢慢添加更多积木(引入Vue Router处理路由)
- 最后搭建出宏伟的城堡(完整的Vue全家桶项目)
这种设计让初学者不会被庞大的概念吓跑,也让老手能够按需取用。
2. 响应式数据绑定——数据变了,界面自动更新
这是Vue最让人"上瘾"的特性。传统开发中,数据变化后你需要手动操作DOM更新界面:
// 传统方式:手动更新DOM
document.getElementById('name').innerHTML = newName;
而在Vue中,你只需要:
// Vue方式:数据驱动视图
this.name = newName; // 界面自动更新,就这么简单!
背后的原理就像一个尽职尽责的管家——你只需要告诉它数据变了,它会自动帮你把所有相关的地方都更新好。
3. 组件化开发——像写HTML一样写代码
Vue的单文件组件(.vue文件)让前端开发变得无比直观:
<template>
<button @click="count++">
点击了 {{ count }} 次
</button>
</template>
<script>
export default {
data() {
return { count: 0 }
}
}
</script>
<style scoped>
button {
color: #42b983;
}
</style>
模板、逻辑、样式,三个部分清晰分离,却又紧密协作。这种组织方式让代码的可读性和可维护性大大提升。
4. Vue 2 vs Vue 3 vs Vue 3 语法糖——三种写法的演变
为了让大家更直观地理解Vue的演进,我用一个简单的计数器组件展示三种写法的区别:
<!-- ============================================ -->
<!-- 方式一:Vue 2 选项式API (Options API) -->
<!-- ============================================ -->
<template>
<div class="counter">
<p>计数:{{ count }}</p>
<button @click="increment">+1</button>
</div>
</template>
<script>
export default {
// data: 定义响应式数据
data() {
return {
count: 0
}
},
// methods: 定义方法
methods: {
increment() {
this.count++
}
},
// computed: 计算属性
computed: {
doubleCount() {
return this.count * 2
}
},
// watch: 监听器
watch: {
count(newVal) {
console.log('count变化了:', newVal)
}
},
// 生命周期钩子
created() {
console.log('组件创建完成')
}
}
</script>
<!-- ============================================ -->
<!-- 方式二:Vue 3 选项式API (Options API) -->
<!-- ============================================ -->
<template>
<div class="counter">
<p>计数:{{ count }}</p>
<button @click="increment">+1</button>
</div>
</template>
<script>
export default {
// Vue 3 仍然支持 Options API,语法基本相同
data() {
return {
count: 0
}
},
methods: {
increment() {
this.count++
}
},
// Vue 3 新增的生命周期选项
beforeMount() {
console.log('即将挂载')
}
}
</script>
<!-- ============================================ -->
<!-- 方式三:Vue 3 组合式API (Composition API) -->
<!-- ============================================ -->
<template>
<div class="counter">
<p>计数:{{ count }}</p>
<button @click="increment">+1</button>
</div>
</template>
<script setup>
import { ref, computed, onMounted } from 'vue'
// ref: 创建响应式数据
const count = ref(0)
// computed: 计算属性
const doubleCount = computed(() => count.value * 2)
// methods: 直接定义函数
const increment = () => {
count.value++
}
// 生命周期钩子(函数式)
onMounted(() => {
console.log('组件挂载完成')
})
</script>
三种写法对比
| 特性 | Vue 2 Options API | Vue 3 Options API | Vue 3 Composition API |
|---|---|---|---|
| 语法风格 | 传统选项对象 | 传统选项对象 | 函数式 +<script setup> |
| 代码组织 | 按选项分类 | 按选项分类 | 按功能/逻辑分组 |
| 类型支持 | 弱 | 一般 | 强 |
| 复用性 | Mixins | Mixins/Extend | Composable/Hooks |
| 学习难度 | 低 | 低 | 中 |
什么时候用什么?
- Vue 2 / Vue 3 Options API :适合小型项目、Vue新手,代码结构直观
- Vue 3 Composition API :适合中大型项目,需要更好的类型推断和代码复用
<script setup>语法糖 :Vue 3.2+ 推荐写法,代码更简洁
💡 小贴士 :虽然Vue 3兼容Vue 2的写法,但官方明确表示Composition API是Vue 3的未来。新项目建议直接使用
<script setup>语法糖。
5. 虚拟DOM——性能与开发体验的平衡
Vue使用虚拟DOM技术,在内存中维护一个DOM树的副本。当数据变化时,Vue会先在虚拟DOM上进行计算,找出最小的变更,然后批量更新真实DOM。这就像一个精明的采购员,先在清单上规划好要买什么,再去超市一次性买齐,而不是想到什么买什么。
二、Vue vs React vs Angular:框架界的"三国演义"
选择框架就像选择武器,各有千秋。让我们客观地对比一下:
| 特性 | Vue.js | React | Angular |
|---|---|---|---|
| 学习曲线 | 平缓,易上手 | 中等,需理解JSX和函数式概念 | 陡峭,概念繁多 |
| 核心思想 | 渐进式、模板语法 | 组件化、JSX | 全面、TypeScript优先 |
| 生态系统 | 官方维护核心工具 | 社区驱动,选择多样 | 大而全,官方包办 |
| 适用场景 | 中小型项目、快速原型 | 大型应用、跨平台 | 企业级大型项目 |
| 国内就业 | 需求量大,尤其中小公司 | 大厂偏好,国际化项目 | 相对较少 |
我的个人建议
- 新手入门 :从Vue开始。它的模板语法接近HTML,概念清晰,官方文档友好(而且有完整的中文版)。
- 职业发展 :两个都学。Vue在国内市场占有率高,React在国际化和大厂中更受欢迎。掌握两者,职业道路更宽广。
- 团队协作 :看团队技术栈。如果团队已有明确的技术选型,跟随团队是最明智的选择。
三、环境搭建:从零开始
好了,理论聊够了,让我们动手搭建开发环境吧!
3.1 安装Node.js
Node.js是JavaScript的运行环境,也是前端工程化的基础。
Windows系统安装步骤:
- 访问 Node.js官网
- 下载LTS(长期支持版)安装包
- 双击安装包,一路"Next"即可
- 打开命令行验证安装:
node -v # 显示Node.js版本,如 v18.17.0
npm -v # 显示npm版本,如 9.6.7
小贴士 :安装Node.js时会自动安装npm(Node Package Manager),它是JavaScript的包管理工具,类似于Python的pip。
3.2 配置npm镜像(国内用户必看)
由于网络原因,国内访问npm官方源可能很慢。我们可以切换到淘宝镜像:
# 切换到淘宝镜像
npm config set registry https://registry.npmmirror.com
# 验证是否切换成功
npm config get registry
或者使用nrm工具管理多个镜像源:
# 安装nrm
npm install -g nrm
# 查看可用镜像源
nrm ls
# 切换镜像源
nrm use taobao
3.3 包管理器选择:npm vs yarn vs pnpm
| 工具 | 特点 | 安装命令 |
|---|---|---|
| npm | Node.js自带,最常用 | 无需安装 |
| yarn | Facebook出品,速度快 | npm install -g yarn |
| pnpm | 磁盘空间效率高 | npm install -g pnpm |
个人推荐:新手用npm足够,进阶后可以尝试pnpm(它用硬链接的方式节省磁盘空间,项目多了能省好几G)。
3.4 创建Vue项目
Vue官方提供了两种创建项目的方式:
方式一:使用create-vue(官方推荐)
# 创建项目
npm create vue@latest my-first-vue-app
# 进入项目目录
cd my-first-vue-app
# 安装依赖
npm install
# 启动开发服务器
npm run dev
创建过程中会询问是否添加TypeScript、Router、Pinia等,新手可以先全部选"No",保持项目简洁。
方式二:使用Vite直接创建
npm create vite@latest my-vue-app -- --template vue
cd my-vue-app
npm install
npm run dev
两种方式的区别:create-vue会提供更多配置选项,适合需要完整项目结构的场景;Vite直接创建更简洁,适合快速实验。
3.5 项目结构一览
创建完成后,你会看到这样的目录结构:
my-first-vue-app/
├── node_modules/ # 依赖包(自动生成,勿手动修改)
├── public/ # 静态资源
├── src/ # 源代码目录
│ ├── assets/ # 资源文件(图片、样式等)
│ ├── components/ # 组件目录
│ ├── App.vue # 根组件
│ └── main.js # 入口文件
├── index.html # HTML模板
├── package.json # 项目配置文件
└── vite.config.js # Vite配置文件
四、Hello World:你的第一个Vue应用
让我们来写一个经典的"Hello World",顺便体验Vue的响应式特性。
4.1 修改App.vue
打开 src/App.vue,替换为以下内容:
<template>
<div class="container">
<h1>{{ greeting }}</h1>
<p class="subtitle">欢迎来到Vue的世界</p>
<div class="input-group">
<label>请输入你的名字:</label>
<input
v-model="name"
placeholder="在这里输入..."
@keyup.enter="updateGreeting"
/>
<button @click="updateGreeting">打招呼</button>
</div>
<p v-if="name" class="message">
你好,<span class="highlight">{{ name }}</span>!
很高兴认识你!🎉
</p>
<div class="counter">
<p>你已经点击了 <span class="highlight">{{ count }}</span> 次</p>
<button @click="count++">+1</button>
<button @click="reset">重置</button>
</div>
</div>
</template>
<script>
export default {
name: 'App',
data() {
return {
greeting: 'Hello, Vue!',
name: '',
count: 0
}
},
methods: {
updateGreeting() {
if (this.name) {
this.greeting = `你好,${this.name}!`
}
},
reset() {
this.count = 0
this.name = ''
this.greeting = 'Hello, Vue!'
}
}
}
</script>
<style scoped>
.container {
max-width: 600px;
margin: 50px auto;
padding: 30px;
text-align: center;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}
h1 {
color: #42b983;
font-size: 2.5em;
margin-bottom: 10px;
}
.subtitle {
color: #666;
margin-bottom: 30px;
}
.input-group {
margin: 20px 0;
}
.input-group label {
display: block;
margin-bottom: 10px;
color: #333;
}
.input-group input {
padding: 10px 15px;
font-size: 16px;
border: 2px solid #ddd;
border-radius: 8px;
margin-right: 10px;
transition: border-color 0.3s;
}
.input-group input:focus {
outline: none;
border-color: #42b983;
}
.input-group button {
padding: 10px 20px;
font-size: 16px;
background: #42b983;
color: white;
border: none;
border-radius: 8px;
cursor: pointer;
transition: background 0.3s;
}
.input-group button:hover {
background: #3aa876;
}
.message {
margin-top: 20px;
padding: 15px;
background: #f0fdf4;
border-radius: 8px;
font-size: 18px;
}
.highlight {
color: #42b983;
font-weight: bold;
}
.counter {
margin-top: 30px;
padding-top: 20px;
border-top: 1px solid #eee;
}
.counter button {
margin: 0 5px;
padding: 8px 16px;
font-size: 14px;
border: none;
border-radius: 6px;
cursor: pointer;
transition: all 0.3s;
}
.counter button:first-of-type {
background: #42b983;
color: white;
}
.counter button:last-of-type {
background: #f5f5f5;
color: #666;
}
.counter button:hover {
transform: translateY(-2px);
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
</style>
4.2 运行项目
在终端执行:
npm run dev
你会看到类似输出:
VITE v5.0.0 ready in 300 ms
➜ Local: http://localhost:5173/
➜ Network: use --host to expose
打开浏览器访问 http://localhost:5173/,你就能看到你的第一个Vue应用了!
4.3 代码解析
让我们来理解这段代码做了什么:
模板部分(template) :
{{ greeting }}:双大括号是Vue的插值语法,会显示data中greeting的值v-model="name":双向数据绑定,输入框的值和name变量自动同步@click="updateGreeting":事件绑定,点击按钮调用updateGreeting方法v-if="name":条件渲染,只有name有值时才显示这个元素
脚本部分(script) :
data():定义组件的响应式数据methods:定义组件的方法
样式部分(style) :
scoped属性:样式只作用于当前组件,不会污染其他组件
五、开发工具推荐
工欲善其事,必先利其器。以下是我推荐的Vue开发工具:
5.1 VS Code扩展
- Vue - Official :Vue官方扩展,提供语法高亮、智能提示
- Vue VSCode Snippets :常用代码片段,输入
vbase快速生成组件模板 - Volar :Vue 3专用扩展(已整合到Vue - Official)
5.2 浏览器扩展
- Vue Devtools :调试神器,可以查看组件树、状态变化、性能分析
安装方法:在Chrome/Edge扩展商店搜索"Vue.js devtools"安装即可。
六、常见问题解答
Q:Vue 2和Vue 3该学哪个?
A:直接学Vue 3。Vue 2已于2023年12月31日停止维护(EOL),Vue 3是现在和未来的主流。好消息是,Vue 3的核心概念和Vue 2基本一致,迁移成本不高。
Q:需要先学JavaScript吗?
A:需要。Vue是JavaScript框架,你需要掌握:
- ES6基础语法(let/const、箭头函数、解构赋值等)
- 数组方法(map、filter、reduce等)
- 模块化概念(import/export)
Q:TypeScript是必须的吗?
A:不是必须的,但强烈推荐学习。TypeScript能让你的代码更健壮,IDE提示更友好。Vue 3对TypeScript的支持非常好。
Q:Vue CLI和Vite有什么区别?
A:Vue CLI是Vue 2时代的官方脚手架,基于Webpack构建。Vite是新一代构建工具,开发时速度更快(利用浏览器原生ES模块)。现在官方推荐使用Vite。
七、总结
今天我们完成了:
- 了解了Vue.js的起源和核心特性
- 对比了Vue、React、Angular三大框架
- 搭建了完整的开发环境
- 编写了第一个Vue应用
Vue的学习曲线平缓,文档友好,社区活跃,是入门前端框架的绝佳选择。记住,学习编程最重要的是动手实践——光看不练假把式,赶紧打开编辑器敲起来吧!
下一站预告
在下一篇文章《Vue实例与数据绑定》中,我们将深入探讨:
- Vue实例的生命周期
- 数据绑定的原理与技巧
- 计算属性vs侦听器的选择
敬请期待!
作者:洋洋技术笔记
原文链接: Vue.js简介与环境搭建