一、前言

在前端技术体系学习中,Vue.js 作为轻量级、渐进式 JavaScript 框架,以其简洁的 API、高效的响应式原理及丰富的生态系统,成为前端开发的主流选择。本次学习以 “实操落地” 为核心,覆盖从环境搭建、基础语法到企业级项目开发的全流程,完成 20 + 核心案例实操,累计沉淀 50 + 条关键开发技巧。本文提炼标准化开发流程(SOP)与高频踩坑解决方案,形成轻量化、可直接复用的技术手册,助力开发者快速上手 Vue.js 并解决实际项目问题。

二、目录

  1. Vue.js 环境搭建与项目初始化(图文实操)
  1. 核心语法与高频 API 速查(场景化)
  1. 组件化开发实战(含通信方案)
  1. 自动化配置与工程化实践
  1. 项目部署与性能优化(实战配置)
  1. 学习总结与避坑指南(精准解决方案)
  1. 附录(资源路径 + 官方文档 + 快捷键表)

三、核心内容详解

(一)Vue.js 环境搭建与项目初始化
  1. 环境准备(补充校验细节)
    • 包管理工具:npm(Node 自带)/yarn(可选,npm install -g yarn安装)
    • 脚手架:Vue CLI 5.x(npm install -g @vue/cli)或 Vite 4.x(npm create vite@latest)
    • 开发工具:VS Code + Vetur/Volar 插件(语法高亮、智能提示)
    • 前置校验:安装完成后执行以下命令验证环境

node -v # 预期输出:v16.18.0+

npm -v # 预期输出:8.19.2+

vue -V # 预期输出:@vue/cli 5.0.8+(Vue CLI安装成功)

  1. 项目初始化(表格标准化,覆盖两种脚手架)

| 步骤 | 操作细节(Vue CLI) | 操作细节(Vite) | 核心要点 |

|------|---------------------|------------------|----------|

| 1 | 执行vue create vue-demo,选择手动配置 | 执行npm create vite@latest vue-demo -- --template vue | 项目名称避免中文、特殊字符 |

| 2 | 勾选特性:Babel、Vue Router、Vuex/Pinia、CSS Pre-processors | 进入项目目录:cd vue-demo,执行npm install | 按需选择特性,避免冗余依赖 |

| 3 | 选择 Vue 版本(推荐 Vue 3)、路由模式(History)、CSS 预处理器(Sass/SCSS) | 启动开发服务:npm run dev | History 模式需后端配置支持,避免刷新 404 |

| 4 | 启动开发服务:npm run serve | 访问地址:http://127.0.0.1:5173/(默认端口) | 端口占用可修改 vite.config.js 中的 server.port |

  1. 项目目录结构解析(核心文件说明)

vue-demo/

├── src/

│ ├── assets/ # 静态资源(图片、样式)

│ ├── components/ # 公共组件

│ ├── router/ # 路由配置

│ ├── store/ # 状态管理(Pinia/Vuex)

│ ├── views/ # 页面组件

│ ├── App.vue # 根组件

│ └── main.js # 入口文件

├── public/ # 静态资源(不被webpack处理)

├── package.json # 依赖配置

└── vite.config.js/Vue.config.js # 工程化配置

(二)核心语法与高频 API 速查
  1. 基础语法(Vue 3 Setup 语法糖,完整可直接复制)

(SFC)示例 -->

-->

msg }} handleClick">点击修改</button>

条件渲染 -->

<div v-if="isShow">条件显示内容>

渲染 -->

>

-for="(item, index) in list" :key="index">{{ item }}>

(父传子) -->

title="childTitle" @child-click="handleChildClick" />

响应式数据(ref用于基本类型,reactive用于引用类型)

import { ref, reactive } from 'vue'

import ChildComponent from './components/ChildComponent.vue'

const msg = ref('Hello Vue.js')

const isShow = ref(true)

const list = reactive(['Vue基础', '组件化', '工程化'])

const childTitle = ref('子组件标题')

// 事件处理函数

const handleClick = () => {

msg.value = 'Vue实战之旅' // ref类型需通过.value修改

}

const handleChildClick = (data) => {

console.log('接收子组件数据:', data)

}

</script>

scoped lang="scss">

/* scoped确保样式隔离,不污染其他组件 */

div {

color: #333;

button {

margin-top: 10px;

padding: 4px 8px;

}

}

  1. 高频 API 速查(补充场景 + 示例)

| API / 语法 | 功能 | 实战场景 | 示例代码 |

|----------|------|----------|----------|

| ref/reactive | 创建响应式数据 | 表单输入、动态渲染 | const count = ref(0)、const user = reactive({ name: 'Vue' }) |

| computed | 计算属性(缓存结果) | 数据格式化、条件计算 | const fullName = computed(() => user.firstName + user.lastName) |

| watch/watchEffect | 监听数据变化 | 数据更新后触发请求、日志记录 | watch(count, (newVal) => console.log('count变化:', newVal)) |

| v-if/v-show | 条件渲染 | 登录状态显示、弹窗控制 | v-if(销毁 DOM,适合低频切换)、v-show(隐藏 DOM,适合高频切换) |

| v-for | 列表渲染 | 数据列表展示 | v-for="(item, key) in obj" :key="key"(对象遍历) |

| props/emits | 父子组件通信 | 组件复用、数据传递 | 父传子:props: { title: String };子传父:emits: ['child-click'] |

| Vue Router | 路由跳转、参数传递 | 页面导航、详情页跳转 | router.push('/detail?id=1') 或 router.push({ name: 'Detail', params: { id: 1 } }) |

(三)组件化开发实战
  1. 需求明确:开发一个通用按钮组件MyButton,支持尺寸(默认 / 中等 / 大型)、类型(主要 / 次要 / 危险)、点击事件传递,实现组件复用;同时实现父子组件、兄弟组件数据通信。
  1. 核心实现步骤

>

:class="['my-button', `my-button--${size}`, `my-button--${type}`]"

@click="$emit('click')"

>

<slot></slot> 支持自定义按钮内容 -->

</template>

<script setup>

const props = defineProps({

size: {

type: String,

default: 'default', // 可选值:default、medium、large

validator: (value) => ['default', 'medium', 'large'].includes(value)

},

type: {

type: String,

default: 'primary', // 可选值:primary、secondary、danger

validator: (value) => ['primary', 'secondary', 'danger'].includes(value)

}

})

>

oped lang="scss">

.my-button {

padding: 6px 12px;

border: none;

border-radius: 4px;

cursor: pointer;

&--primary { background: #42b983; color: #fff; }

&--secondary { background: #fff; color: #333; border: 1px solid #eee; }

&--danger { background: #f56c6c; color: #fff; }

&--medium { padding: 8px 16px; }

&--large { padding: 10px 20px; font-size: 16px; }

}


primary" @click="handleBtnClick">主要按钮</MyButton>

<MyButton type="danger" size="large">危险按钮</MyButton>

" size="medium">次要按钮 import MyButton from '@/components/MyButton.vue'

const handleBtnClick = () => {

alert('主要按钮被点击')

}

- 步骤3:兄弟组件通信(使用Pinia)

① 安装Pinia:`npm install pinia`

② 创建状态管理(src/store/counter.js)

```javascript

import { defineStore } from 'pinia'

export const useCounterStore = defineStore('counter', {

state: () => ({ count: 0 }),

actions: {

increment() { this.count++ }

}

})

③ 兄弟组件 A(使用状态)


:{{ counterStore.count }}</div>

>

>

import { useCounterStore } from '@/store/counter'

const counterStore = useCounterStore()

>

④ 兄弟组件 B(修改状态)


>

@click="counterStore.increment">增加计数Button>

>

>

import MyButton from '@/components/MyButton.vue'

import { useCounterStore } from '@/store/counter'

const counterStore = useCounterStore()

    • 步骤 1:开发通用组件(src/components/MyButton.vue)
    • 步骤 2:父子组件通信(页面中使用 MyButton)
(四)自动化配置与工程化实践
  1. ESLint + Prettier 代码规范配置(统一代码风格)
    • 安装依赖:

npm install -D eslint prettier eslint-plugin-vue eslint-config-prettier

    • 配置.eslintrc.js:

module.exports = {

root: true,

env: { browser: true, node: true },

extends: [

'eslint:recommended',

'plugin:vue/vue3-essential',

'prettier' // 整合Prettier,避免规则冲突

],

rules: {

'vue/no-unused-vars': 'error', // 未使用变量报错

'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off' // 生产环境禁止console

}

}

    • 配置.prettierrc:

{

"semi": false, // 结尾不加分号

"singleQuote": true, // 使用单引号

"tabWidth": 2, // 缩进2个空格

"trailingComma": "none" // 数组/对象最后一项不加逗号

}

  1. 自动化部署脚本(使用 shell 脚本,支持 GitHub Pages)

#!/bin/bash

# Vue项目自动化部署脚本(部署到GitHub Pages)

# 作者:XXX

# 版本:v1.0

# 步骤1:构建生产环境包

echo "开始构建生产环境包..."

npm run build

# 步骤2:进入构建产物目录

cd dist

# 步骤3:初始化git仓库(用于部署)

git init

git add -A

git commit -m "deploy: $(date +'%Y-%m-%d %H:%M:%S')"

# 步骤4:推送到GitHub Pages(替换为你的仓库地址)

git push -f git@github.com:your-username/vue-demo.git master:gh-pages

# 步骤5:返回项目根目录并清理

cd ..

rm -rf dist/.git

echo "部署成功!访问地址:https://your-username.github.io/vue-demo/"

  • 使用方式:将脚本保存为 deploy.sh,执行chmod +x deploy.sh授权,然后运行./deploy.sh
(五)项目部署与性能优化
  1. 生产环境构建与部署(Nginx 为例)
    • 构建生产包:

npm run build # Vue CLI输出到dist目录,Vite同样输出到dist目录

    • Nginx 配置(/etc/nginx/conf.d/vue-demo.conf):

server {

listen 80;

server_name vue-demo.example.com; # 你的域名

root /usr/share/nginx/html/vue-demo; # dist目录部署路径

# 解决History路由刷新404问题

location / {

try_files $uri $uri/ /index.html;

}

# 静态资源缓存优化

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {

expires 7d; # 缓存7天

add_header Cache-Control "public, max-age=604800";

}

}

    • 部署步骤:将 dist 目录下的所有文件复制到/usr/share/nginx/html/vue-demo,重启 Nginx:systemctl restart nginx
  1. 性能优化核心方案(实战配置)

// src/router/index.js

import { createRouter, createWebHistory } from 'vue-router'

// 懒加载页面组件

const Home = () => import('@/views/Home.vue')

const Detail = () => import('@/views/Detail.vue')

const routes = [

{ path: '/', component: Home },

{ path: '/detail', component: Detail }

]

const router = createRouter({

history: createWebHistory(),

routes

})

export default router

      1. 路由懒加载(减少首屏加载体积)

npm install -D vite-plugin-imagemin # Vite项目

# Vue CLI项目使用image-webpack-loader

配置 vite.config.js:


import { defineConfig } from 'vite'

import vue from '@vitejs/plugin-vue'

import imagemin from 'vite-plugin-imagemin'

export default defineConfig({

plugins: [

vue(),

imagemin({

gifsicle: { optimizationLevel: 7, interlaced: false },

optipng: { optimizationLevel: 7 },

mozjpeg: { quality: 80 },

pngquant: { quality: [0.8, 0.9], speed: 4 },

svgo: { plugins: [{ name: 'removeViewBox', active: false }] }

})

]

})

      1. 图片优化(使用 vite-plugin-imagemin 压缩图片)

npm install element-plus @element-plus/icons-vue

配置 src/main.js:


import { createApp } from 'vue'

import App from './App.vue'

import { ElButton, ElMessage } from 'element-plus' // 按需引入组件

import 'element-plus/dist/index.css' // 引入样式

const app = createApp(App)

app.use(ElButton).use(ElMessage) // 注册组件

app.mount('#app')

      1. 依赖优化(按需引入第三方库,以 Element Plus 为例)
(六)学习总结与避坑指南
  1. 核心收获(结构化)
    • 技术能力:掌握 Vue.js 从环境搭建、基础语法到工程化部署的全流程,熟练运用组件化、响应式、路由、状态管理等核心特性。
    • 工程化思维:理解 ESLint/Prettier 代码
Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐