讲一下ruoyi-vue3的前端项目目录结构

好,这里我按 ruoyi-vue3 官方前端工程的真实结构 ,用「从根到细节 」的方式给你讲一遍,重点放在每个目录存在的意义、什么时候会用、能不能删/改,而不是泛泛而谈。

以下说明基于 RuoYi-Vue3(Vite + Vue3 + Pinia + Element Plus) 标准版本,你现在贴的代码也完全对得上这一套。


一、项目根目录结构(第一层)

text 复制代码
ruoyi-ui/
├─ public/
├─ src/
├─ .env
├─ .env.development
├─ .env.production
├─ index.html
├─ package.json
├─ vite.config.js
└─ README.md

1️⃣ public/(静态资源原样拷贝)

text 复制代码
public/
├─ favicon.ico
├─ robots.txt
└─ ...

特点

  • 不会被 Vite 处理
  • 打包时 原样复制 到 dist/
  • 通过 /xxx 直接访问

适合放什么

✅ favicon

✅ robots.txt

❌ 不建议放业务图片(无法 hash)


2️⃣ .env*(环境变量)

text 复制代码
.env
.env.development
.env.production
  • 必须 VITE_ 开头才能在前端使用
  • 常见内容:
env 复制代码
VITE_APP_TITLE=若依后台管理系统
VITE_APP_ENV=development
VITE_APP_BASE_API=/dev-api

3️⃣ index.html

  • Vite 入口文件
  • 不是 Vue 组件
  • 挂载点:
html 复制代码
<div id="app"></div>

4️⃣ vite.config.js

  • Vite 核心配置
  • proxy / alias / build 都在这
  • 你前面贴的那份就是标准 ruoyi 写法

二、src/ 目录(核心)

text 复制代码
src/
├─ api/
├─ assets/
├─ components/
├─ directive/
├─ layout/
├─ router/
├─ store/
├─ utils/
├─ views/
├─ App.vue
├─ main.js
└─ settings.js

三、核心启动链路(必须懂)

1️⃣ main.js(程序入口)

ts 复制代码
createApp(App)
  .use(router)
  .use(pinia)
  .mount('#app')

作用:

  • 初始化 Vue
  • 注册插件
  • 启动整个应用

2️⃣ App.vue(根组件)

  • 整个系统的最外层
  • 通常只包含:
vue 复制代码
<router-view />

四、业务核心目录详解

1️⃣ api/ ------ 后端接口封装

text 复制代码
api/
├─ login.js
├─ system/
│  ├─ user.js
│  ├─ role.js
│  └─ menu.js

特点:

  • 一个文件 = 一类接口
  • 只做请求,不处理 UI
  • 全部走 utils/request.js

2️⃣ router/ ------ 路由系统(非常重要)

text 复制代码
router/
├─ index.js        // 路由实例
├─ routes.js       // 静态路由
└─ permission.js   // 路由守卫

你刚才贴的代码 👉 就在这里

职责划分:

  • routes.js:固定页面(登录 / 404)
  • permission.js:登录鉴权、动态路由

3️⃣ store/ ------ Pinia 状态管理

text 复制代码
store/
├─ modules/
│  ├─ user.js
│  ├─ permission.js
│  └─ settings.js
└─ index.js

各模块职责

模块 作用
user token / 用户信息 / roles
permission 动态路由生成
settings 主题 / 布局

👉 ruoyi 强制按模块拆 store


4️⃣ layout/ ------ 页面骨架(后台核心)

text 复制代码
layout/
├─ index.vue
├─ components/
│  ├─ Sidebar/
│  ├─ Navbar/
│  ├─ TagsView/
│  └─ AppMain.vue

职责

  • 左侧菜单
  • 顶部导航
  • 标签页
  • 主内容区

👉 几乎所有业务页面都被包在 layout 里


5️⃣ views/ ------ 页面级组件

text 复制代码
views/
├─ login/
│  └─ index.vue
├─ dashboard/
│  └─ index.vue
├─ system/
│  ├─ user/
│  ├─ role/
│  └─ menu/

规则:

  • 一个路由 = 一个目录
  • 只处理页面和交互
  • 不直接发请求(走 api)

6️⃣ components/ ------ 公共组件

text 复制代码
components/
├─ SvgIcon/
├─ Pagination/
├─ DictTag/

特点:

  • 高复用
  • 无业务耦合
  • 可全局注册

7️⃣ utils/ ------ 工具函数

text 复制代码
utils/
├─ request.js     // axios 封装(核心)
├─ auth.js        // token 处理
├─ validate.js    // 校验工具
├─ dynamicTitle.js

你之前贴的:

  • getToken
  • isHttp
  • isPathMatch
    👉 都在这里

8️⃣ directive/ ------ 自定义指令

text 复制代码
directive/
├─ permission.js
└─ index.js

典型用法:

html 复制代码
<button v-hasPermi="['system:user:add']">

9️⃣ assets/ ------ 需要打包的静态资源

text 复制代码
assets/
├─ images/
├─ styles/
│  ├─ index.scss
│  └─ variables.scss

与 public/ 的区别:

  • 会被 Vite 处理
  • 会加 hash
  • 推荐放业务资源

🔟 settings.js ------ 系统默认配置

ts 复制代码
export default {
  title: 'RuoYi',
  sideTheme: 'dark',
  tagsView: true
}

👉 对应你刚才讲的 useSettingsStore


五、你现在这个项目的「整体架构思想」

一句话总结:

前端完全围绕「权限 + 动态路由 + 后台布局」设计

核心三件事:

  1. 登录态控制
  2. 后端菜单驱动前端路由
  3. layout 统一壳 + views 业务页

最后给你一个「记忆口诀」

复制代码
api 管请求
views 管页面
layout 管框架
store 管状态
router 管权限
utils 管工具

如果你下一步想深入:

  • 🔥 动态路由是怎么从菜单变成页面的
  • 🧠 permissionStore.generateRoutes 的源码逻辑
  • 🧹 精简 ruoyi 目录结构(适合小项目)

直接说你想「拆哪一块」,我给你画流程图级别的解释。

相关推荐
一只游鱼4 小时前
我用原生 JS 做了一个「会呼吸」的博客:Canvas 水境 + 合成音效 + 会破裂的留言气泡(vibe coding)
javascript·agent·canvas·github pages
JarvanMo4 小时前
让 3D 在 Flutter 中焕发生机:Flutter GPU 与 flutter_scene 实战经验
前端
狂师5 小时前
太强了!GitHub上开源了一款AI自动化测试框架,0代码搞定前后端测试!
前端·后端·测试
只睡四小时5 小时前
Local-First 数据契约:一张表装下 4 类数据
前端·javascript·架构设计·local-first·数据契约
迅猛龙办公室5 小时前
Python函数实现反转一个只有3位数的整数
开发语言·前端·python
我星期八休息5 小时前
Redis 的原理和使用(2)
前端·数据库·redis·python·mysql·缓存·bootstrap
Java后端的Ai之路5 小时前
19-ReactJS最佳实践
前端·react.js·前端框架
溪语流沙5 小时前
【Web全栈进阶】文件上传与图片展示:早报站的第一张图片
前端·vue.js·python·fastapi
alwaysrun5 小时前
Web之wasm-bindgen详解
前端·wasm·bindgen
鬼手点金5 小时前
如何选择模型
java·前端·人工智能·git·深度学习