百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程文章 > 正文

Vue3.2项目架构详解_vue3项目搭建

qiyuwang 2025-02-20 17:41 16 浏览 0 评论

前言

随着vue3.2版本的更新,最新vue全家桶技术栈也发生了部分改变

老版本全家桶:vue2.6+vue-router+vuex+vue-cli+axios

新版本全家桶:vue3.2+vue-router@4.x+pinia+vite2+TypeScript+axios

接下来我们开始一起搭建一个移动端vue3.2的项目吧~

#1.快速创建项目

yarn create vite my-vue-app --template vue-ts   #快速初始化项目
yarn   #安装项目所有三方包
yarn dev  #运行项目

#2.vite 配置

vite.config.js 配置

安装 path 模块 配置@快捷路径

yarn add @types/node -D
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: {
      '@': resolve(__dirname, 'src') // 设置 `@` 指向 `src` 目录
    }
  },
  base: './', // 设置打包路径
})

#3.vue-router 路由配置

安装 vue-router@4 版本

yarn add vue-router@4

创建 src/router/index.ts 路由配置文件

import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'
const routes: Array = [
    {
        path: '/',
        redirect: '/home'
    },
    {
        path: '/home',
        name:'home',
        component: () => import('@/views/home/Home.vue')
    },
    {
        path: '/about',
        name:'about',
        component: () => import('@/views/about/About.vue')
    }
]
const router = createRouter({
    history: createWebHistory(),
    routes
})
export default router

将路由配置文件 注册到顶级对象中 main.ts

import { createApp } from 'vue'
import App from './App.vue'
import router from './router/index'

const app = createApp(App);
//挂载路由:一定要先创建app 然后注册路由,最后才是挂载 app的dom节点【必须有先后顺序】
app.use(router);

app.mount('#app')

#4.pinia 替代vuex

官网地址: https://pinia.vuejs.org/

pinia 是新一代状态管理仓库,是和vue3 连用的新型状态管理仓库。

尤雨溪: pinia相当于就是vuex5 ,未来vuex不会再进行更新和升级。

pinia 有非常强的类型推断特点,不必再为了类型的定义烦恼

vuex:五大核心配置: state getters mutations(同步修改数据) actions(异步修改数据) modules

pinia:四大核心配置:state getters actions【修改数据的方法】 modules

#4.1 安装 pinia

yarn add pinia

#4.2 创建文件 src/store/index.ts

import { defineStore } from 'pinia'

//defineStore 函数
//参数1:模块名 保证整个状态管理中的唯一
//参数2:对象 包含核心配置
export const testStore = defineStore('test', {
  state: () => {
    return {
        num:100,
    }
  },
  getters: {
    getNewNum(): string {
        return '最新的数字是:'+this.num;
    }
  },
  actions: {
    setNewNum(num:number) {
        this.num = num;
    }
  }
})

#4.3 main.ts 挂载

import { createApp } from 'vue'
const app = createApp(App)
//导入pinia 状态管理
import {createPinia} from 'pinia'
const store = createPinia();

//注册pinia 
app.use(store)

#4.4 使用数据

使用数据2种方法

// 导入定义好的 状态管理类
import { testStore } from '../../store';
//通过testStore 创建一个一个实例
const test = testStore()

//使用方式1: 需要使用时获取
console.log(test.num);  
//使用方式2: 加入computed 每次改变自动拿到最新数据
//computed 获取最新数据
const num = computed(()=>{
    return test.num;
})

#4.5 修改状态管理中的数据

修改数据的2种方法

import { testStore } from '../../store';
//通过testStore 创建一个一个实例
const test = testStore()

//方式1:修改状态管理库中的数据
const addNum=()=>{
    //直接修改数据
    test.$patch({num:test.num+1})
}
//方式2:借助actions方法 覆盖数据
const setNum=()=>{
    test.setNewNum(2000);
}

#4.6 getters 装饰器使用

import { testStore } from '../../store';
//通过testStore 创建一个一个实例
const test = testStore()

let getterNum = test.getNewNum;
console.log(getterNum);   //最新的数字是:100

#5. 使用vant@4

官网地址:
https://vant-contrib.gitee.io/vant/v4/#/zh-CN/home

  • 安装 最新版 vant ui(vue3版本)
npm i vant
或
yarn add vant 

#5.1 导入所有组件 【不推荐】

不推荐原因:vant 封装了太多业务组件,如果一次性导入所有的组件,项目打包时会打包非常多用不到的组件,浪费性能。

  • main.ts
import { createApp } from 'vue'
const app = createApp(App)

//导入vant ui 
import Vant from 'vant';
import 'vant/lib/index.css';
app.use(Vant);

#5.2 按需导入【推荐】

  • main.ts
//按需导入vant ui 
import 'vant/lib/index.css';
import { Button,Field } from 'vant';
//注册组件
app.use(Button).use(Field);
  • 组件使用

#6.使用 ant design vue @3

官网地址:
https://www.antdv.com/components/overview

UI框架一般只选择一个,真实项目中 vant 和 antd 选择一个即可

  • 安装
 npm i --save ant-design-vue 
或
yarn add ant-design-vue 

#6.1 全局导入所有组件

另外两种注册方案: 按需全局注册(和vant按需引入方法一致) 和 组件局部注册使用 方案,请移步官方文档。

import { createApp } from 'vue'
const app = createApp(App)

//全局导入 antd 
import Antd from 'ant-design-vue';
import 'ant-design-vue/dist/antd.css';
app.use(Antd)
  • 组件使用


#7.使用 element plus

最新版element导入使用:
https://element-plus.gitee.io/zh-CN/

UI框架一般只选择一个,真实项目中 vant antd 和 element 选择一个即可

注意:vue3的管理系统中 element plus 有很多细节的bug,使用时一定要注意!!!

  • 安装
npm install element-plus --save
或
yarn add element-plus

#7.1 全局注册所有组件

import { createApp } from 'vue'
const app = createApp(App)

//全局导入 element 
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
app.use(ElementPlus)
  • 组件使用


#8.axios 三层封装

两个接口均为测试mock数据接口

  • 安装
yarn add axios 
或
npm i axios 

#8.1全局配置层

主要完成 全局默认配置 ,拦截器配置等

创建: src/utils/request.ts

import axios from 'axios';

//服务器地址
axios.defaults.baseURL = 'https://api.example.com';

// 添加请求拦截器
axios.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    return config;
  }, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  });

// 添加响应拦截器
axios.interceptors.response.use(function (response) {
    // 对响应数据做点什么
    return response;
  }, function (error) {
    // 对响应错误做点什么
    return Promise.reject(error);
  });

#8.2 接口对应层

完成与后端接口一一对应的函数封装

创建 src/api/test.ts

import request from '../utils/request';

//get请求
export const wishList =(params:any)=>{
    return  request({
        url:'/wish/list',
        method:'get',
        params
    })
}

//post请求
export const cookerList =(data:any)=>{
    return  request({
        url:'/users/cookerList',
        method:'post',
        data
    })
}

#8.3 接口调用层

调用时 异步转同步 直接获取返回数据 async await



相关推荐

centos7使用yum安装nginx+php7+mysql5.6

本文主要介绍安装在centos7下如何安装nginx+php+mysql的环境,centos7的版本自带安装源的版本无法实现PHP5.4以上的版本,数据库默认用的是mariadb,文章介绍的安装是如何...

Linux基础入门(VMWare中CentOS7配置yum)

上一章节,介绍了《Linux基础入门(CentOS7下通过命令行配置网络)》,本章将介绍如何配置yum源,方便后续在学习和使用的过程中,对所需工具的安装;...

CentOS 7搭建Nextcloud私有云(centos搭建云盘)

Nextcloud简介:对于私人网盘,其中最出名的就是seafile、owncloud和nextcloud。seafile是国人开发的,有免费和企业版,免费的功能有限;nextcloud是owncl...

分享一个docker镜像源地址,解决docker不能拉取的问题

自己搭建的代理,centos7只需要修改/etc/docker/daemon.json并输入以下内容:{"registry-mirrors":["https://next...

源支付5.18版全套开源源码客户端+云端+监控+协议三网免挂免输入

源支付5.18最新版协议去授权全套三端开源源码_客户端+云端+监控+协议三网免挂免输入(全套版)推荐系统为:CentOS7.6Linux系统环境:Nginx1.20.1+MySQL5.6....

centos7飞速搭建zabbix5.0并添加windows、linux监控

一、环境zabbix所在服务器系统为centos7,监控的服务器为windows2016和centos7。二、安装zabbix官方安装帮助页面...

CentOS上配置 Docker 使用代理服务器

hub.docker最近总被墙,国内大厂搞的docker镜像源代理被封被停,对于一个严重依赖一些海外项目的软件开发人员,简直没法干活了。docker要在CentOS上配置Docker使用代理服...

CentOS 7 (阿里云虚拟机) 安装 Docker

一、安装Docker1.使用root权限登录CentOS。确保yum包更新到最新sudoyumupdate...

Centos离线静默安装 oracle11g,步骤细验证成功

一、环境要求1.1.涉及工具及环境1)CentOS764位系统2)oracle安装包文件a)linux.x64_11gR2_database_1of2.zip...

Linux运维之制作指定软件包的YUM源

#挑战30天在头条写日记#关注我,不迷路,大家好,我是大王。--记录运维中遇到的故障及排查方法...

在CentOS 9 安装Nvidia显卡驱动详细操作步骤

今天给粉丝网友演示CentOS9系统下如何安装nvidia显卡驱动。·将下载好的显卡驱动放到文件夹中,这里以download为例,放入文件夹中开始对系统软件升级,是为了防止在安装显卡驱动时显示报错...

基于Linux系统的本地Yum源搭建与配置(ISO方式、RPM方式)

前言:由于公司业务服务器大部分都在内网环境下运行,内网环境无法直接使用yum安装升级更新软件,所以需要自建Yum源来满足目前日常工作需要。...

最新zabbix一键安装脚本(基于centos8)

一、环境准备注意:操作系统必须是centos8及以上的,因为我配的安装源是centos8的。并且必须连接互联网,脚本是基于yum安装的!!!...

CentOS7中使用yum安装Nginx的方法

1、添加源  默认情况Centos7中无Nginx的源,最近发现Nginx官网提供了Centos的源地址。因此可以如下执行命令添加源(...

Centos8出现Failed to download metadata for repo 'AppStream'解决

大家都知道Centos8于2021年年底停止了服务,大家再在使用yum源安装时候,出现下面错误“错误:Failedtodownloadmetadataforrepo'AppStre...

取消回复欢迎 发表评论: