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的项目结构采用模块化的方式进行组织,有助于分层管理,方便项目的维护和扩展。

原创文章,作者:TURIV,如若转载,请注明出处:https://www.506064.com/n/361227.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
TURIVTURIV
上一篇 2025-02-24 00:34
下一篇 2025-02-24 00:34

相关推荐

  • 掌握magic-api item.import,为你的项目注入灵魂

    你是否曾经想要导入一个模块,但却不知道如何实现?又或者,你是否在使用magic-api时遇到了无法导入的问题?那么,你来到了正确的地方。在本文中,我们将详细阐述magic-api的…

    编程 2025-04-29
  • Vue TS工程结构用法介绍

    在本篇文章中,我们将从多个方面对Vue TS工程结构进行详细的阐述,涵盖文件结构、路由配置、组件间通讯、状态管理等内容,并给出对应的代码示例。 一、文件结构 一个好的文件结构可以极…

    编程 2025-04-29
  • Python程序的三种基本控制结构

    控制结构是编程语言中非常重要的一部分,它们指导着程序如何在不同的情况下执行相应的指令。Python作为一种高级编程语言,也拥有三种基本的控制结构:顺序结构、选择结构和循环结构。 一…

    编程 2025-04-29
  • GitHub好玩的开源项目

    本文旨在介绍GitHub上一些好玩的开源项目,并提供代码示例供读者参考和学习。 一、Emoji列表 GitHub上有一份完整的Emoji列表,它支持各种平台和设备,方便用户在Git…

    编程 2025-04-28
  • 如何将Java项目分成Modules并使用Git进行版本控制

    本文将向您展示如何将Java项目分成模块,并使用Git对它们进行版本控制。分割Java项目可以使其更容易维护和拓展。Git版本控制还可以让您跟踪项目的发展并协作开发。 一、为什么要…

    编程 2025-04-28
  • Django框架:从简介到项目实战

    本文将从Django的介绍,以及如何搭建Django环境开始,逐步深入到Django模型、视图、模板、表单,最后通过一个小型项目实战,进行综合性的应用,让读者获得更深入的学习。 一…

    编程 2025-04-28
  • IIS部署Python项目

    本文将从多个方面详细阐述在IIS上如何部署Python项目。包括安装IIS、安装Python、配置IIS、编写和部署Python代码等内容。 一、安装IIS和Python 在开始进…

    编程 2025-04-28
  • 如何使用TKE来开发Java项目

    本文将从多个方面详细阐述如何使用TKE(Theia IDE)来进行Java项目的开发。TKE是一个功能强大的在线集成开发环境,提供了大量的工具和插件,让开发者可以高效地进行Java…

    编程 2025-04-28
  • Lidar避障与AI结构光避障哪个更好?

    简单回答:Lidar避障适用于需要高精度避障的场景,而AI结构光避障更适用于需要快速响应的场景。 一、Lidar避障 Lidar,即激光雷达,通过激光束扫描环境获取点云数据,从而实…

    编程 2025-04-27
  • Spark开源项目-大数据处理的新星

    Spark是一款开源的大数据分布式计算框架,它能够高效地处理海量数据,并且具有快速、强大且易于使用的特点。本文将从以下几个方面阐述Spark的优点、特点及其相关使用技巧。 一、Sp…

    编程 2025-04-27

发表回复

登录后才能评论