--- description: src 目录结构、就近聚合与全局/局部划分(uni-app / Vue3) alwaysApply: true --- # 目录与就近聚合 源码在 `src`。全局目录:`components`(kebab-case + `index.vue`)、`hooks`(`use-xxx.ts`)、`types`、`api`(含唯一 `request.ts`)、`static`、`store`、`utils`、`styles`。 ## 页面文件夹(`pages//`) 可就近存放该页专属内容: | 文件 | 说明 | |------|------| | `index.vue` | 页面入口 | | `.types.ts` | 仅本页使用的类型 | | `use-.ts` | 仅本页使用的 hooks | | `.api.ts` | 仅本页的接口函数(调用 `src/api/request.ts`,不重复写拦截) | | `.scss` | 本页独立样式(可选) | | `components/` | 页面私有子组件;子组件目录内可有 `types.ts` | 命名示例(页面 `home`):`home.types.ts`、`use-home.ts`、`home.api.ts`。 ## 局部 vs 全局 - 仅单页使用 → 放在 `pages//` 下就近管理 - 多页复用 → `src/types`、`src/hooks`、`src/api`(按业务模块拆分,非每页一份 request) ## 禁止 - 页面 `.vue` 在 `pages` 根目录;静态资源在 `src` 外 - 页面私有组件/类型/hooks/api 随意提到 `src` 顶层 - 每页重复实现请求封装(拦截器只在 `src/api/request.ts`) - 在 `.vue` 里堆应抽离的共享类型(简单局部类型除外) ## 示例 ``` src/pages/home/ index.vue home.types.ts use-home.ts home.api.ts components/feed-item/index.vue src/api/request.ts src/api/user.ts src/hooks/use-auth.ts ``` 新建与重构时:先判断是否多页复用,再选页面内就近或顶层全局。