讲一下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 目录结构(适合小项目)

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

相关推荐
这是个栗子42 分钟前
【JS代码分析】前端鉴权基础:Token 的本地存储与状态重置实践
开发语言·前端·javascript
颜进强43 分钟前
14 - OpenSpec 老页面改造骨架:定位 + 增量 + 回归三件套
前端·后端·ai编程
做前端的娜娜子44 分钟前
async/await 错误处理:try...catch vs .catch() 完全指南
前端·面试·掘金·金石计划
半个落月1 小时前
React 性能优化入门:用 memo 避免无关的子组件重复渲染
前端·react.js
北城笑笑1 小时前
Server 18 ,Nginx + Vite 前端部署排错实战:从 `/api/gpt/chat` 404 到 9012 后端服务的完整定位过程
linux·运维·前端·nginx·ubuntu·vue
江华森1 小时前
从抓包到嗅探:用 C 语言把《计算机网络》第 9-13 章全部跑一遍
前端
IT_陈寒1 小时前
Vite打包给我挖的这个坑,差点搞崩我的项目
前端·人工智能·后端
恋猫de小郭2 小时前
Flutter A2UI 的正确用法,怎么把 AI 和动态 UI 结合有效生产
android·前端·flutter
程序员-珍2 小时前
安卓开发:同名 styles.xml 在不同分支/文件夹的合并规则
android·xml·前端
Ashley的成长之路2 小时前
前端性能优化实战手册·第5篇(最终篇):性能监控与 CI/CD 集成
前端·ci/cd·性能优化