Vue.js 学习心得:从入门到实战的技术沉淀
而 LoRA(Low-Rank Adaptation,低秩适配)技术通过在预训练模型上添加少量可训练参数,冻结大部分原始参数,在显著降低计算成本的同时,实现与全量微调相近的性能。在实际应用中,可以根据不同的业务场景(如智能客服、文档摘要、代码生成等)灵活调整数据和参数,让大模型更好地服务于你的需求。在人工智能领域,大语言模型(LLM)的应用日益广泛,但通用大模型在特定任务上的表现往往差强人意。本文
一、前言
在前端技术体系学习中,Vue.js 作为轻量级、渐进式 JavaScript 框架,以其简洁的 API、高效的响应式原理及丰富的生态系统,成为前端开发的主流选择。本次学习以 “实操落地” 为核心,覆盖从环境搭建、基础语法到企业级项目开发的全流程,完成 20 + 核心案例实操,累计沉淀 50 + 条关键开发技巧。本文提炼标准化开发流程(SOP)与高频踩坑解决方案,形成轻量化、可直接复用的技术手册,助力开发者快速上手 Vue.js 并解决实际项目问题。
二、目录
- Vue.js 环境搭建与项目初始化(图文实操)
- 核心语法与高频 API 速查(场景化)
- 组件化开发实战(含通信方案)
- 自动化配置与工程化实践
- 项目部署与性能优化(实战配置)
- 学习总结与避坑指南(精准解决方案)
- 附录(资源路径 + 官方文档 + 快捷键表)
三、核心内容详解
(一)Vue.js 环境搭建与项目初始化
- 环境准备(补充校验细节)
-
- 包管理工具: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安装成功)
- 项目初始化(表格标准化,覆盖两种脚手架)
| 步骤 | 操作细节(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 |
- 项目目录结构解析(核心文件说明)
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 速查
- 基础语法(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;
}
}
- 高频 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 } }) |
(三)组件化开发实战
- 需求明确:开发一个通用按钮组件MyButton,支持尺寸(默认 / 中等 / 大型)、类型(主要 / 次要 / 危险)、点击事件传递,实现组件复用;同时实现父子组件、兄弟组件数据通信。
- 核心实现步骤
>
: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)
(四)自动化配置与工程化实践
- 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" // 数组/对象最后一项不加逗号
}
- 自动化部署脚本(使用 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
(五)项目部署与性能优化
- 生产环境构建与部署(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
- 性能优化核心方案(实战配置)
// 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
-
-
- 路由懒加载(减少首屏加载体积)
-
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 }] }
})
]
})
-
-
- 图片优化(使用 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')
-
-
- 依赖优化(按需引入第三方库,以 Element Plus 为例)
-
(六)学习总结与避坑指南
- 核心收获(结构化)
-
- 技术能力:掌握 Vue.js 从环境搭建、基础语法到工程化部署的全流程,熟练运用组件化、响应式、路由、状态管理等核心特性。
-
- 工程化思维:理解 ESLint/Prettier 代码
更多推荐
所有评论(0)