用 Spring Boot 类比,一次性搞懂 Vue 3 目录结构(附对应关系表)
一、前言:为什么用 Spring Boot 类比?
很多前端开发者可能同时接触过 Java 后端,而 Vue 3 和 Spring Boot 作为前后端各自的主流框架,在工程化设计理念上高度一致(比如「配置与业务分离」「组件复用」「标准化目录」)。
用 Spring Boot 类比 Vue 3 目录,能帮你跳过「纯前端概念」的壁垒,从熟悉的后端视角快速掌握 Vue 3 代码组织逻辑——毕竟,前后端的工程化本质是相通的。
二、根目录核心文件:Vue 3 vs Spring Boot
根目录是项目的「配置中枢」,包含依赖管理、构建配置、静态资源等核心文件。两者的对应关系如下:
|
Vue 3 根目录文件/目录 |
作用描述 |
Spring Boot 对应物 |
核心共性(为什么能对应?) |
|
|
1. 声明项目依赖( |
|
依赖管理中心:两者都负责「告诉工具需要哪些依赖」「怎么执行构建命令」。比如 |
|
|
1. 配置 Vite 构建工具(如开发服务器端口 |
|
框架核心配置:两者都用来定制框架行为。比如 Vite 配置代理解决跨域,对应 Spring Boot 配置 |
|
|
1. 前端唯一入口 HTML 文件 |
|
应用入口页面:都是用户访问时的「第一个页面文件」。Vue 的 |
|
|
存放「无需 Vite 编译」的静态资源(如 |
|
未编译静态资源目录:两者存放的资源都不会被构建工具处理(比如 Vite 不压缩 |
|
|
生产环境打包产物(包含优化后的 HTML、压缩后的 CSS/JS、处理后的图片),可直接部署到 Nginx 等服务器 |
|
构建输出目录:两者都是「打包后可直接部署的产物」。Vue 的 |
|
|
配置 Git 忽略的文件/目录(如 |
|
版本控制忽略规则:前后端通用,避免将依赖包、构建产物等冗余文件提交到 Git。 |
三、src 目录:开发核心区的类比
src/ 是 Vue 3 开发的「主战场」,对应 Spring Boot 的 src/main/java/ + src/main/resources/,是业务代码和核心资源的存放地。
3.1 src 目录整体结构
先看 Vue 3 标准 src/ 结构:
src/
├── main.js # 入口 JS(启动 Vue 应用)
├── App.vue # 根组件(全局布局)
├── assets/ # 可编译的静态资源(SCSS、需要优化的图片)
├── components/ # 通用 UI 组件(可复用,如 Button、Card)
├── views/ # 页面级组件(对应路由,如 Home.vue、About.vue)
├── router/ # 路由配置(Vue Router)
├── store/ # 状态管理(Pinia,替代 Vuex)
└── utils/ # 工具函数(如请求封装、日期格式化)
3.2 逐个拆解:Vue 3 vs Spring Boot
1. src/main.js → Spring Boot 启动类(如 DemoApplication.java)
Vue 3 中作用:前端应用的「启动入口」,负责初始化 Vue 实例、挂载核心功能(路由、状态管理)。
代码示例:
// src/main.js
import { createApp } from 'vue'
import App from './App.vue'
import router from './router' // 导入路由
import { createPinia } from 'pinia' // 导入 Pinia
// 1. 创建 Vue 实例 → 2. 注册路由和 Pinia → 3. 挂载到 index.html 的 #app 元素
createApp(App)
.use(router)
.use(createPinia())
.mount('#app')
Spring Boot 对应物:src/main/java/com/example/DemoApplication.java(启动类),负责初始化 Spring 容器、扫描组件。
代码示例:
// Spring Boot 启动类
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication // 扫描当前包及子包的组件(@Controller、@Service 等)
public class DemoApplication {
public static void main(String[] args) {
// 启动 Spring 容器
SpringApplication.run(DemoApplication.class, args);
}
}
共性:都是「应用启动入口」,负责初始化框架核心实例(Vue 实例 vs Spring 容器),并集成核心功能(路由/Pinia vs Controller/Service)。
2. src/App.vue → Spring Boot 全局布局模板(如 layouts/main.html)
Vue 3 中作用:前端「根组件」,定义全局布局(如导航栏、页脚),通过 <router-view/> 承接不同页面组件。
代码示例(简化版):
<!-- src/App.vue -->
<template>
<!-- 全局导航栏 -->
<nav>
<router-link to="/">首页</router-link>
<router-link to="/about">关于我们</router-link>
</nav>
<!-- 路由出口:匹配的页面组件会渲染到这里 -->
<router-view/>
<!-- 全局页脚 -->
<footer>© 2024 Vue 3 Demo</footer>
</template>
<style>
/* 全局样式 */
body { margin: 0; padding: 0; }
</style>
Spring Boot 对应物:src/main/resources/templates/layouts/main.html(全局布局模板),通过 th:replace 等语法引入子页面。
共性:都是「全局顶层结构」,统一应用的整体布局,避免每个页面重复编写导航栏、页脚等公共部分。
3. src/components/ → Spring Boot 通用组件(@Component 注解类)
Vue 3 中作用:存放「可复用的 UI 组件」(如按钮、表单、弹窗),供多个页面(views/)调用。
示例:src/components/Button/Button.vue(封装一个自定义按钮),可在 Home.vue、About.vue 中重复使用。
Spring Boot 对应物:src/main/java/com/example/component/ 目录下的 @Component 注解类(如 DateUtilsComponent.java),封装通用业务逻辑,供多个 Controller/Service 调用。
共性:都是「复用性组件」,将独立功能封装成模块,减少代码重复(前端 UI 复用 vs 后端逻辑复用)。
4. src/views/ → Spring Boot Controller(@Controller 注解类)
Vue 3 中作用:存放「页面级组件」,每个组件对应一个路由(如 Home.vue 对应 /,About.vue 对应 /about),是前端对外的「页面入口」。
Spring Boot 对应物:src/main/java/com/example/controller/ 目录下的 @Controller 或 @RestController 类(如 UserController.java),每个接口对应一个 URL(如 /api/user/list),是后端对外的「接口入口」。
共性:都是「对外入口」—— views/ 对应前端 URL 与页面的映射,Controller 对应后端 URL 与接口的映射,直接承接用户请求。
5. src/router/ → Spring Boot @RequestMapping 注解
Vue 3 中作用:通过 Vue Router 配置「URL 与页面组件的映射关系」,控制页面跳转。
代码示例(src/router/index.js):
import { createRouter, createWebHistory } from 'vue-router'
import Home from '../views/Home.vue'
import About from '../views/About.vue'
const routes = [
{ path: '/', name: 'Home', component: Home }, // URL / → 渲染 Home.vue
{ path: '/about', name: 'About', component: About } // URL /about → 渲染 About.vue
]
const router = createRouter({
history: createWebHistory(), // 无 # 号的 HTML5 历史模式
routes
})
export default router
Spring Boot 对应物:@RequestMapping 或 @GetMapping 注解(如在 Controller 中配置 URL 与方法的映射):
@RestController
@RequestMapping("/api/user")
public class UserController {
// URL /api/user/list → 调用 list() 方法
@GetMapping("/list")
public List<User> list() {
return userService.getUserList();
}
}
共性:都是「路由映射规则」—— 前端通过 router/ 定义 URL 到页面的映射,后端通过注解定义 URL 到接口方法的映射。
6. src/store/(Pinia)→ Spring Boot Service(@Service 注解类)
Vue 3 中作用:通过 Pinia 管理「全局状态」(如用户登录信息、购物车数据),供多个组件共享(无需通过 props 传递)。
代码示例(src/store/userStore.js):
import { defineStore } from 'pinia'
// 定义用户状态存储
export const useUserStore = defineStore('user', {
state: () => ({
username: '', // 用户名
isLogin: false // 是否登录
}),
actions: {
// 登录方法:修改状态
login(username) {
this.username = username
this.isLogin = true
},
// 登出方法
logout() {
this.username = ''
this.isLogin = false
}
}
})
Spring Boot 对应物:src/main/java/com/example/service/ 目录下的 @Service 类(如 UserService.java),封装核心业务逻辑,供多个 Controller 共享(如用户登录、数据查询)。
共性:都是「全局数据/逻辑中心」—— Pinia 存储前端全局状态,Service 处理后端全局业务逻辑,避免数据/逻辑分散在各个组件/Controller 中。
7. 其他目录类比
|
Vue 3 目录 |
作用 |
Spring Boot 对应物 |
|
|
存放「需 Vite 编译的静态资源」(如 SCSS 样式、需要压缩的图片),构建时会被优化(如图片压缩、SCSS 转 CSS) |
|
|
|
存放「通用工具函数」(如 Axios 请求封装、日期格式化 |
|
四、核心逻辑总结:前后端工程化的共性
通过类比你会发现,Vue 3 和 Spring Boot 的目录设计,本质都是为了解决「大型项目如何组织代码」的问题,核心思路高度一致:
- 配置与业务分离:
根目录(package.json、vite.config.js)负责配置,src/负责业务代码;对应 Spring Boot 的pom.xml、application.yml负责配置,src/main/java/负责业务代码。 - 组件化/模块化复用:
前端用components/复用 UI,后端用@Component复用逻辑;前端用utils/封装工具函数,后端用util/封装工具类。 - 入口与实现分离:
前端用views/+router/定义页面入口,后端用Controller+@RequestMapping定义接口入口;核心逻辑分别放在store/、Service中,解耦入口与实现。
五、最后:一张图搞定对应关系
为了方便记忆,整理了一张「Vue 3 vs Spring Boot 目录对应关系图」(文字版):
Vue 3 项目 ↔ Spring Boot 项目
├─ package.json ↔ pom.xml / build.gradle(依赖管理)
├─ vite.config.js ↔ application.yml(框架配置)
├─ index.html ↔ templates/index.html(入口页面)
├─ public/ ↔ static/(未编译静态资源)
├─ dist/ ↔ target/(构建输出)
└─ src/ ↔ src/main/java/ + src/main/resources/
├─ main.js ↔ DemoApplication.java(启动入口)
├─ App.vue ↔ layouts/main.html(全局布局)
├─ components/ ↔ component/(@Component 通用组件)
├─ views/ ↔ controller/(@Controller 接口入口)
├─ router/ ↔ @RequestMapping(路由映射)
├─ store/ ↔ service/(@Service 业务逻辑)
├─ assets/ ↔ resources/assets/(可编译资源)
└─ utils/ ↔ util/(工具类)
如果这篇文章帮你理清了 Vue 3 目录结构,欢迎点赞收藏~ 若有疑问(如 Pinia 具体用法、Vite 配置细节),可以在评论区留言讨论!
更多推荐



所有评论(0)