2.7 KiB
2.7 KiB
当前框架技术栈说明
本目录讲上手这套脚手架需要的概念。本仓库怎么分层、模块之间数据怎么走,见 项目架构。新代码怎么命名、怎么接进容器,见 代码撰写规范。
目录
阅读顺序
- 本文。
- DDD是什么。知道四层、聚合根和端口各自放什么。
- DI是什么。知道类怎样进容器,页面怎样拿到它们。
- mobx是什么。知道页面状态、实体和快照。
- 常见设计模式及使用。只看本仓库用到的几种。
- 代码实践。沿登录走一遍。
国际化、数据库、Worker 的用法在 doc/项目文档/基础应用/。界面组件使用 Ant Design,不在本目录展开。
技术栈
| 作用 | 库 |
|---|---|
| 界面 | React |
| 路由 | React Router。路由表在 src/app/routes.ts |
| 构建 | Vite。环境文件在 src/,只暴露 VITE_ 开头的变量 |
| 语言 | TypeScript。装饰器需要 experimentalDecorators 和 emitDecoratorMetadata |
| 依赖注入 | Inversify。容器在 src/app/di/root_container.ts |
| 页面状态 | MobX,配合 mobx-react-lite 的 observer |
| 实体 | mobx-keystone 的 @model |
| 请求 | axios。封装在 src/app/network |
| 文案 | i18next |
| 样式 | Sass |
路径别名 @/ 指向 src/。跨目录用它,同一功能模块内部用相对路径。
样式
组件样式用同名 .scss,在组件文件里 import。主题色由 src/app/theme 解析后交给 Ant Design,不在每个组件里各写一套亮色和暗色。
路由怎么挂页面
页面不自己注册路由。src/app/routes.ts 把 URL 指到 presentation 下的页面文件,页面使用默认导出。
export default [
layout('routes/app_shell.tsx', [
index('../features/home/presentation/home/home.tsx'),
layout('routes/layouts/guest.layout.tsx', [
route('security', '../features/security/presentation/security/security.tsx'),
]),
layout('routes/layouts/auth.layout.tsx', [
route('editor/:projectId', '../features/editor/presentation/editor/editor.tsx'),
]),
]),
] satisfies RouteConfig;
app_shell 提供文案和主题。guest 只允许未登录进入,例如 /security。auth 只允许已登录进入,例如 /editor/:projectId。判断使用 hasSession(),规则在 decideRoutePolicy。
新增页面时:在功能模块的 presentation 写下默认导出的页面,再在这张表里登记路径和布局。