推荐目录结构
VEF 最适合按“页面场景”组织项目,而不是把所有 components、hooks、services 都堆成巨型公共目录。
仓库中的示例应用 playground 采用了这一组织方式,可作为目录拆分参考。
本页说明的是标准目录骨架;关于命名规则、放置规则和禁止模式,请继续阅读 应用项目规范。
推荐目录
src/
api/
index.ts
request.ts
apis/
auth/
sys/
md/
pmr/
helpers/
config.ts
hooks/
use-upload/
pages/
__root.tsx
_common/
login.tsx
access-denied.tsx
_layout/
route.ts
index/
route.tsx
auth/
sys/
md/
pmr/
router/
context.ts
router.gen.ts
main.ts
每个目录负责什么
| 目录 | 作用 | 推荐放什么 |
|---|---|---|
api/ | 应用级 API 客户端能力 | createApiClient()、统一请求包装、公共 header |
apis/ | 领域 API 函数 | findUserPage、createUser、refreshAuth |
helpers/ | 与业务无关但与应用有关的工具 | 配置读取、环境变量包装 |
hooks/ | 页面复用 hooks | 上传、弹窗状态、组合逻辑 |
pages/ | 路由和页面主体 | route.tsx、页面组件、局部 helper |
router/ | router 实例与上下文 | createRouter()、RouterContext |
页面目录怎么拆
VEF 下一个典型 CRUD 页面通常这样拆:
pages/_layout/auth/user/
route.tsx
helpers/
index.ts
components/
basic-search.tsx
form.tsx
这种拆法的好处是:
route.tsx只负责拼装CrudPagecomponents/form.tsx只负责表单字段components/basic-search.tsx只负责搜索区域helpers/index.ts只负责createCrudKit()这类页面类型适配
API 目录怎么拆
推荐按业务领域拆 apis/:
apis/
auth/
auth.ts
user.ts
role.ts
menu.ts
sys/
app.ts
audit-log.ts
md/
department.ts
staff.ts
每个文件里只做两件事:
- 定义接口类型
- 导出
createQueryFn()/createMutationFn()结果
基础启动骨架
从零搭建项目时,通常会先创建这些文件:
src/main.tssrc/api/index.tssrc/router/context.tssrc/router/index.tssrc/pages/__root.tsxsrc/pages/_layout/route.tssrc/pages/_common/login.tsxsrc/pages/_common/access-denied.tsx