这个项目的目录结构是标准的Vite + Vue3 + TS架构,它比传统的 uni-app 项目更接近 Vue3 官方的开发体验。
JeecgUniapp/
├── src/
│ ├── api/ # 所有的接口定义,按模块分类(如 sys.ts, user.ts)
│ ├── components/ # 全局自定义组件,Jeecg 封装的 UI 件
│ ├── hooks/ # Vue3 的组合式 API 钩子(封装逻辑复用)
│ ├── layouts/ # 页面布局模板(配合插件实现页面包装)
│ ├── pages/ # 【主包】核心页面(首页、登录、仪表盘)
│ ├── pages_detail/ # 【分包】详情类页面,减轻主包压力
│ ├── pages_sample/ # 【分包】示例页面,演示各种组件用法
│ ├── static/ # 静态资源(图标、图片)
│ ├── store/ # Pinia 状态管理(存储用户信息、Token)
│ ├── utils/ # 工具类(重点是其中的 http 目录)
│ ├── App.vue # 根组件
│ ├── main.ts # 项目入口
│ ├── pages.json.js # 动态路由生成的逻辑(如果有)
│ └── vite.config.ts # 核心插件配置(所有黑科技的源头)
封装uni.request到http目录
封装在http里的作用:
统一拦截 (Interceptors):
请求拦截:在每个请求发出去前,自动在 Header 里塞入
X-Access-Token。你不用每个页面都去写拿 Token 的代码。响应拦截:如果后端返回 401(Token过期),拦截器直接帮你弹窗并跳到登录页。如果返回 500,直接统一弹出错误提示。
环境切换:通过封装,你可以一键切换
开发环境、测试环境和生产环境的 API 地址。Promise 化:让原本的回调函数写法变成
async/await,代码写起来像德芙一样顺滑。
@uni-helper/vite-plugin-uni-pages彻底解析
这就是你最懵逼的地方。它是“约定式路由”的实现者。
1.<route>标签是什么意思?
在每个.vue文件顶部的这段代码,叫做SFC(单文件组件)路由配置。
HTML
<route lang="json5" type="page"> { layout: 'default', style: { navigationBarTitleText: '用户中心', navigationStyle: 'custom' } } </route>lang="json5":支持带注释的 JSON。type="page":标记这是个页面。layout:告诉框架,这个页面要套用哪个底色或导航栏模板。
2. 为什么要用它?(作用)
自动化:以前你增加一个页面,得去
pages.json手动填地址、标题。现在你只要在src/pages下新建个文件,插件自动帮你把地址塞进pages.json。代码内聚:标题是啥、是否允许下拉刷新,这些配置直接写在页面代码里,不用跨文件找。
3. 如何使用?
你只需要在vite.config.ts里引入它。插件会监听你的src/pages文件夹,只要你保存代码,它就在后台刷新pages.json。
四、 分包(Subpackages)是怎么实现的?
Jeecg 项目的分包实现非常聪明,也是靠这个插件完成的。
实现原理:
文件夹约定:你在
src下看到以pages_开头的目录(如pages_detail)。插件配置:在
vite.config.ts的UniPages配置里,指定这些目录为分包目录。动态编译:插件扫描到这些特殊文件夹时,会自动在
pages.json的subPackages字段里生成对应的路径。
为什么要分包?因为小程序主包限制 2MB。Jeecg 这种功能非常多的项目,如果不分包,你连预览都点不开。通过这种方式,只有用户点击“详情”时,才会去加载pages_detail里的代码,极大提升了首屏启动速度。