您的位置:

Vue3项目结构详解

一、Vue3项目结构概述

Vue3在项目结构方面沿用了Vue2的思想,将项目分为组件、路由、状态管理、API请求等几个模块。这些模块以文件夹的形式进行组织,有助于开发者对项目进行分层管理,便于增强代码可维护性和扩展性。

说了这么多,应该来看看Vue3的项目结构是怎样的:

my-project
├── public
│   ├── favicon.ico
│   ├── index.html
│   └── robots.txt
├── src
│   ├── api
│   ├── assets
│   ├── components
│   ├── router
│   ├── store
│   ├── utils
│   ├── views
│   ├── App.vue
│   └── main.js
├── .gitignore
├── babel.config.js
├── package.json
├── README.md
└── vue.config.js

项目中有两个主要的文件夹,分别是public和src。其中,public目录存放的是公共静态资源,例如index.html,favicon.ico等。src目录存放的是项目的源代码。

二、组件模块

Vue3中,组件是项目的重要组成部分。组件模块主要存放的是封装好的Vue组件。

在组件模块中,我们可以根据业务需求,在components目录下建立一个或多个子目录,如:

components
├── common      //常用组件
├── layout      //布局组件
├── views       //业务组件
├── test        //测试组件
├── index.js    //导出所有自定义组件
├── README.md   //组件介绍

index.js文件是组件的入口文件,将不同的组件导出,示例代码如下:

//example.js
import Header from "./Header.vue"
import Aside from "./Aside.vue"
import Footer from "./Footer.vue"

export default {
  Header,
  Aside,
  Footer
}

使用时只需导入该文件即可,代码如下:

<template>
  <div>
    <Header />
    <Aside />
    <Footer />
  </div>
</template>
 
<script>
import example from "components/test/index.js";

export default {
  components: {
    ...example
  },
  //其他
}
</script>

三、路由模块

路由模块主要存放的是前端路由相关的配置文件。在Vue3中我们可以使用Vue Router 4.x.x 版本做路由管理,将路由配置分散到各个子模块中,代码如下:

router
├── index.js
├── modules
│   ├── home.js
│   ├── about.js
│   ├── news.js
│   └── user
│       ├── index.js
│       ├── profile.js
│       └── setting.js
└── README.md

其中,index.js是路由的入口文件,示例代码如下:

//index.js
import { createRouter, createWebHashHistory } from "vue-router";

//导入模块路由
import homeRouter from "./modules/home";
import aboutRouter from "./modules/about";
import newsRouter from "./modules/news";
import userRouter from "./modules/user";

//创建路由
const router = createRouter({
  history: createWebHashHistory(),
  routes: [
    homeRouter,
    aboutRouter,
    newsRouter,
    userRouter
  ],
});

export default router;

每个模块中的路由配置代码如下:

//home.js
const homeRouter = {
  path: '/',
  name: 'Home',
  component: () => import('@/views/Home.vue')
};

export default homeRouter;

使用时,只需在目标页面上添加<router-view>标签,路由会根据路由配置自动渲染页面。

四、状态管理模块

状态管理模块主要存放的是全局状态相关的配置文件。在Vue3中,我们可以使用Vuex 4.x.x 版本来实现全局状态的管理,将状态管理分散到不同的子模块中,代码如下:

store
├── index.js
├── modules
│   ├── user.js
│   ├── cart.js
│   └── index.js
└── README.md

其中,index.js是状态管理的入口文件,示例代码如下:

//index.js
import { createStore } from 'vuex'
import cart from './modules/cart.js'
import user from './modules/user.js'

const store = createStore({
  modules: {
    cart,
    user
  },
})

export default store;

每个子模块中的状态配置代码如下:

//cart.js
const state = {
  cartList: [],
}

const mutations = {
  addCart(state, payload) {
    state.cartList.push(payload)
  }
}

const actions = {
  addCart(context, payload) {
    context.commit('addCart', payload)
  }
}

export default {
  state,
  mutations,
  actions
}

使用时,只需在需要使用状态管理中的组件中,使用Vuex提供的useStore函数即可获取store对象,方便对状态进行操作。

五、API请求模块

API请求模块主要存放的是与后端API交互的相关文件。在Vue3中,可以使用axios等第三方库或自己封装的API请求库来进行数据请求,示例代码如下:

api
├── http.js
├── modules
│   └── user.js
└── README.md

其中,http.js是封装好的API请求库,代码如下:

//http.js
import axios from 'axios'

const service = axios.create({
  baseURL: 'http://localhost:3000/api/',
  timeout: 5000,
})

// request拦截器
service.interceptors.request.use(
  config => {
    //其他操作
    return config
  },
  error => {
    console.log(error)
    return Promise.reject(error)
  }
)

// response拦截器
service.interceptors.response.use(
  response => {
    //其他操作
    return response
  },
  error => {
    console.log(error)
    return Promise.reject(error)
  }
)

export default service

每个子模块中的API请求代码如下:

//user.js
import http from "@/api/http.js";

const userApi = {
  getUserInfo(params) {
    return http.post("user/getUserInfo", params);
  },
};

export default userApi;

使用时,只需要导入需要请求的API并调用对应的函数即可。

六、总结

本文从组件、路由、状态管理、API请求等四个方面对Vue3项目结构做了详细的阐述,并给出了相应的代码示例。Vue3的项目结构采用模块化的方式进行组织,有助于分层管理,方便项目的维护和扩展。