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. 服务器响应 | 后端返回数据给 api ,api 返回 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
更新状态页面组件 监听状态变化,重新渲染视图