当前位置: 首页 > ops >正文

VUE目录结构详解

 VUE的优势:单页应用 和 工程化

什么是单页应用?

  • SPA:整个应用只有一个 HTML 页面,所有的内容通过 JS 动态加载和渲染。

  • 路由切换不会重新加载页面,而是动态切换不同组件和视图。

  • 用户体验更流畅,接近桌面应用。

人话:就是 只有一个 app.vue 页面,剩下的都是组件,就是pages里面的内容,它点击任何页面,标签页都不会转圈圈重新刷新,就动态变化页面上的元素。

什么是工程化?

工程化就是让 Vue 项目有标准化的目录结构、规范的代码、自动化的构建和测试流程,团队协作更顺畅,项目易维护且更具扩展性。

AAAAA      // 项目根目录
├── node_modules/          // 依赖包目录(npm install 后自动生成)
├── public/                // 公共静态资源,编译后原样复制到 dist,比如 index.html、favicon.ico 等
├── src/                   // 源码目录,核心开发代码都在这里
│   ├── api/               // 封装所有 API 请求方法,如 axios 封装、接口配置
│   ├── assets/            // 静态资源,如图片、样式、字体
│   ├── components/        // 公共组件,如按钮、弹窗、播放器(FlvPlayer.vue)等
│   ├── pages/             // 页面级组件,每个页面一个.vue,通常和路由一一对应
│   ├── plugins/           // 插件注册目录(如:axios、element-ui、echarts等第三方库)
│   ├── store/             // Vuex 状态管理目录(或是 Pinia),存储应用级共享状态
│   ├── utils/             // 工具类函数封装,比如时间格式化、深拷贝、防抖节流等
│   └── App.vue            // 根组件,是所有页面的入口组件
├── main.js                // 入口 JS 文件,创建 Vue 实例并挂载 App.vue,注册 router、store
├── router.js              // 路由配置,定义页面跳转规则
├── .gitignore             // Git 忽略文件,列出不需要提交到版本库的文件/目录
├── babel.config.js        // Babel 配置文件,用于将高级 JavaScript 语法转换为兼容性代码
├── package.json           // 项目依赖和脚本配置的清单,也是 npm 管理的核心文件(相当于maven中pom)
├── README.md              // 项目说明文档(Markdown 格式)
├── vue.config.js          // Vue CLI 的项目配置文件,比如 devServer 设置、路径别名、代理等(相当于Spring中 的application.yml)
└── yarn.lock              // yarn 包管理器生成的锁定依赖版本的文件(与 package-lock.json 类似)

 babel.config.js:是babel的配置,babel是一个降级的,我给你举个例子,就是javascript他有很多版本。比如2025最新的版本,他可能有一些很新的API,这些API在很多浏览器都不支持,但是很多用户用的还是老版本的浏览器,这个时候就要用babel来处理,他相当于用老版本的代码在应用层实现了新版的API,所以你开发的时候可以用2025最新的语法,实际编译之后,babel会给他变成等价的老版本代码

gitignore:提交GIT仓库的时候哪些文件需要忽略

api:用于请求后端接口

assets:用于存在静态资源,图片,样式,字体等

components: 用于存放公共组件,如按钮、弹窗、播放器等

pages:页面级组件,就是一个页面,每一个 .vue,通常和路由一一对应

plugins: 插件,如axios、element-ui,echarts等

store:用于存放状态,vuex或者pinia,共享状态

utils: 工具类函数封装,如时间格式化,深拷贝,防抖节流等

App.vue:根组件,就是这一个页面,是所有页面的入口组件

mian.js : 入口js文件,创建vue实力并挂载APP.vue ,注册router、store

router.js : 路由配置,定义页面跳转规则

.gitignore : git忽略文件,列出不需要提交的git上的文件、目录

package.json : 项目依赖和脚本配置的清单,相当于 Maven的pom

readme.md : 说明文档

vue.config.js : vue cli 的项目配置文件,相当于 Spring的 application

yarn.lock : 包管理器生成的锁定依赖版本的文件(与 package-lock.json 类似)

一、整体调用顺序和依赖关系

main.js(启动应用)↓
router.js(路由匹配)↓
页面组件(pages/)或子组件(components/)↓
store(Vuex)分发 action↓
api(接口请求封装)↓
后端接口(服务器)↑
响应数据返回↑
api 返回数据给 store↑
store 更新 state↑
页面组件从 state 读取数据并渲染视图

二、详细说明

阶段具体调用关系说明
1. 项目启动浏览器打开项目,main.js 创建 Vue 实例,挂载路由和状态管理这是程序启动的入口,只执行一次
2. 路由匹配用户访问某个路径,router.js 根据路径加载对应页面组件路由控制哪个页面显示,且通常触发数据请求
3. 页面组件加载页面组件的生命周期钩子(如 onMounted)调用 store.dispatch 发起数据请求组件主动“调用” Vuex 里的 action,告诉它去拿数据
4. Vuex 处理Vuex action 通过调用 api 中封装的接口请求方法发起异步请求Vuex 负责调用 api,隔离组件与网络请求细节
5. 接口请求api 里调用 axios 等工具发起 HTTP 请求到后端服务器实际发起网络请求,拿到服务器数据
6. 服务器响应后端返回数据给 apiapi 返回 Promise 的数据给 Vuex数据经过 axios 返回,传递给 Vuex
7. 状态更新Vuex action 通过 commit 触发 mutation 修改状态数据状态变化后,Vue 会自动通知依赖该数据的组件
8. 组件渲染组件通过 computed 读取 store.state,页面更新视图视图和数据绑定自动刷新,完成展示


三、调用链总结(谁调用谁)

  • main.js 负责启动,调用 .use(router), .use(store)

  • router.js 监听 URL,加载对应页面组件

  • 页面组件 调用 store.dispatch 请求数据

  • store.actions 调用 api 中接口请求函数

  • api 调用 axios 发起 HTTP 请求

  • 服务器 返回数据给 api

  • api 返回 Promise 结果给 store.actions

  • store.mutations 通过 commit 更新状态

  • 页面组件 监听状态变化,重新渲染视图

http://www.xdnf.cn/news/15623.html

相关文章:

  • 1 初识C++
  • ElasticSearch Doc Values和Fielddata详解
  • 数学积分方程显式求解
  • Android性能优化之电量优化
  • http与https的主要区别是什么?
  • http性能测试命令ab
  • sqli-labs靶场通关笔记:第29-31关 HTTP参数污染
  • 【前端】输入框输入内容时,根据文本长度自动分割,中间用横杠分割
  • 模版匹配的曲线好看与否有影响吗?
  • Git 中如何比较不同版本之间的差异?常用命令有哪些?
  • 金属伪影校正的双域联合深度学习框架复现
  • Prometheus错误率监控与告警实战:如何自定义规则精准预警服务器异常
  • Spring Boot 应用优雅停机与资源清理:深入理解关闭钩子
  • SQLite 数据库字段类型-详细说明,数据类型详细说明。
  • ES v.s Milvus v.s PG
  • kafka 单机部署指南(KRaft 版本)
  • 代码训练营DAY35 第九章 动态规划part03
  • cocosCreator2.4 Android 输入法遮挡
  • 车载监控录像系统:智能安全驾驶的守护者
  • AI编程工具 Cursor 和 Kiro 哪个的Claude更好用!
  • 如何使用Python将HTML格式的文本转换为Markdown格式?
  • Java基础篇
  • Altera Quartus:编译完成后自动生成pof文件
  • 20250718-6-Kubernetes 调度-Pod对象:环境变量,初始容器,静态_笔记
  • VR平台应该具备哪些功能?怎样选择VR平台?
  • 【playwright篇】教程(十六)[macOS+playwright相关问题]
  • 填坑 | React Context原理
  • AndroidX中ComponentActivity与原生 Activity 的区别
  • STM32+w5500+TcpClient学习笔记
  • JAVA中StringBuilder类,StringJoiner类构造函数方法简单介绍