# 技术选型 > 版本: v0.4.0 | 作者: Arch AI | 基于 PRD v0.4.0 + 旧架构合并 --- ## 1. 技术栈总览 | 层 | 选型 | 版本 | 选型理由 | |----|------|------|----------| | 小程序框架 | Taro | 4.1.x | 跨端能力(微信/抖音/H5),React 生态 | | UI 框架 | React | 18.x | Hooks 生态成熟,社区资源丰富 | | UI 组件库 | shadcn/ui (Taro 适配) | — | 可定制、无样式锁定、复制即用 | | 样式方案 | Tailwind CSS | 4.x | 原子化 CSS,与 shadcn/ui 深度集成 | | 状态管理 | Zustand | 5.x | 轻量、无 Provider、TS 友好 | | 后端框架 | NestJS | 10.x | 模块化、IoC、企业级 Node.js 框架 | | ORM | Drizzle ORM | 0.45.x | Type-safe、轻量、SQL-like API | | 数据库 | PostgreSQL | 15+ | 关系型、JSON 支持、全文搜索 | | AI 能力 | Coze SDK | — | 现成 OCR + NLP 能力,无需自训 | | 文件存储 | S3 兼容 (MinIO/Supabase) | — | 图片上传,标准化接口 | | 包管理 | pnpm | 9.x | monorepo 原生支持、磁盘效率高 | | 图像处理 | Sharp | 0.33.x | Node.js 高性能图像处理,CLAHE/旋转/缩放 | | PDF 生成 | PDFKit | 0.15.x | Node.js PDF 生成,A4/300DPI 排版 | | 测试 | Jest | 29.x | 生态最大、React 测试工具链成熟 | | 语言 | TypeScript | 5.x | 全栈类型安全 | ## 2. 关键选型决策 ### 2.1 为什么是 Taro 而不是 uni-app? | 维度 | Taro | uni-app | |------|------|---------| | React 支持 | 一等公民 | Vue 为主 | | shadcn/ui | 社区已有 Taro 适配 | 无 | | 跨端编译 | 编译时转译,性能好 | 运行时适配,有开销 | | 社区 | 京东维护,活跃 | DCloud 维护 | **决策**: Taro。项目已用 React + shadcn/ui 体系,Taro 天然匹配。最终仅发布微信小程序,但 Taro 保留了未来迁移 H5/原生 APP 的灵活性(后端 API 不变,只换前端壳)。 ### 2.2 为什么是 NestJS 而不是 Express/Fastify? | 维度 | NestJS | Express | |------|--------|---------| | 架构约束 | 模块化 + 依赖注入 | 无约束,需自建 | | TypeScript | 一等公民 | 需额外配置 | | 测试友好 | 内置 TestingModule | 需自建 | | 微服务支持 | 内置 Transport 层 | 需自建 | **决策**: NestJS。自建后端是刚性需求——Coze 沙盒自动化测试需要完整的后端环境(长连接、GPU 调用、流式响应),微信云开发(云函数 10s 超时)无法满足。同时 NestJS 模块化设计降低长期拆分微服务的迁移成本。 ### 2.3 为什么是 Drizzle ORM 而不是 Prisma? | 维度 | Drizzle | Prisma | |------|---------|--------| | Bundle 大小 | < 10KB | ~500KB+ (engine) | | SQL 控制 | SQL-like API,接近原生 | 抽象层厚 | | 边缘运行时 | 支持 | 需额外配置 | | 迁移工具 | 内置 | 内置 | **决策**: Drizzle。小程序场景对包体积敏感,Drizzle 更轻。且项目初期 SQL 灵活性重要。 ### 2.4 AI 方案: Coze SDK vs 直接调用 API | 维度 | Coze SDK | 直接 Claude/GPT API | |------|----------|---------------------| | 开发量 | 低(工作流已封装) | 高(需自建 prompt chain) | | OCR 能力 | 内置 | 需额外组件 | | 成本 | 按调用次数 | 按 token | | 可定制性 | 低 | 高 | **决策**: MVP 用 Coze SDK 快速上线,Phase 3 评估自研模型(P02)。 ## 3. 暂不引入的技术 | 技术 | 原因 | 引入时机 | |------|------|----------| | Redis | MVP 无高频读写,PostgreSQL 足够 | Phase 3(推荐/排行榜缓存) | | Docker/K8s | 单实例部署,先跑起来 | Phase 3(CI/CD 配套) | | GraphQL | REST 足够,前端查询模式简单 | Phase 3(复杂查询场景) | | Elasticsearch | PostgreSQL 全文搜索够用 | Phase 3(题库搜索量大时) | | Kafka/RabbitMQ | 无异步解耦需求 | Phase 3(微服务拆分后) | ## 4. 技术债务记录 | 债务 | 说明 | 偿还计划 | |------|------|----------| | P01 项目代码是"代码检测"模板 | 需要替换为错题本业务代码 | Phase 2 开发时自然替换 | | 无 CI/CD | 手动测试部署 | Phase 3 引入 GitHub Actions | | 无监控 | 无 APM/日志收集 | Phase 3 引入 Sentry + 阿里云日志 | --- *关联: 总体架构.md → 模块设计.md*