# EdgeKey 项目开发规范指南 本指南为AI助手提供EdgeKey项目开发迭代的标准流程和规范要求,确保代码质量和项目一致性。 ## 项目架构概览 ### 技术栈 - **前端框架**: Vue 3 + Vike(文件路由 + SSR) - **服务端**: Hono(路由与中间件) - **运行时**: Cloudflare Workers - **数据库**: Cloudflare D1(原生SQLite) - **ORM**: Prisma(Cloudflare适配器) - **UI框架**: Tailwind CSS + daisyUI - **构建工具**: Vite + Bun - **认证**: Auth.js(管理员账号密码登录) - **数据变更**: Telefunc(前后端同构RPC) ### 核心约束 1. **Cloudflare Workers环境限制**: - 禁止依赖`node:fs`、`node:path`等Node.js原生模块 - 使用Web Crypto API(`crypto.subtle`)处理签名,避免第三方加密库 - 脚本体积限制(免费版3MB),引入新依赖必须经过批准 2. **数据库特殊性**: - 使用Cloudflare D1(SQLite),非传统数据库 - 开发环境使用本地D1模拟器,生产环境使用远程D1 - 禁止使用`prisma migrate dev`,必须使用特定迁移工作流 ### 项目结构 ``` edgeKey/ ├── pages/ # Vike页面路由 ├── components/ # Vue组件 ├── lib/ # 核心库(logger、error、http-client、utils) ├── modules/ # 业务模块(payment、email、order) ├── server/ # 服务端(Hono、中间件) ├── prisma/ # 数据库模型和迁移 ├── assets/ # 静态资源 └── docs/ # 文档 ``` **核心库文件**: - `lib/logger.ts`: 日志模块(自动注入请求上下文、错误序列化) - `lib/app-error.ts`: 错误处理模块(AppError类、错误工厂函数) - `lib/http-client.ts`: HTTP 客户端(统一请求封装,支持超时、重试) - `lib/request-context.ts`: 请求上下文管理(AsyncLocalStorage) --- ## 开发流程规范 ### 1. 环境准备 ```bash bun install # 安装依赖 bun run db:generate # 生成Prisma客户端 bun run db:migrations:local # 初始化本地数据库 bun run db:seed # 初始化种子数据 bun run dev # 启动开发服务器 ``` ### 2. 数据库变更流程 **重要**: 修改数据库表结构时必须遵循以下流程: #### 步骤1: 修改Schema并生成迁移SQL ```bash bunx prisma migrate diff \ --from-migrations prisma/migrations \ --to-schema prisma/schema.prisma \ --script > prisma/migrations/000X_描述.sql ``` #### 步骤2: 同步到本地开发环境 ```bash bun run db:migrations:local ``` #### 步骤3: 部署前同步到生产环境 ```bash bun run db:migrations:remote ``` ### 3. 代码提交与部署 ```bash bun run build # 构建项目 bun run preview # 本地预览构建结果 bun run deploy # 部署到Cloudflare Workers # 或 bun run up # 构建并部署 ``` --- ## 代码规范 ### 文件组织 - **页面文件**: `pages/`目录,遵循Vike文件路由约定 - **组件**: `components/`目录,通用组件 - **业务逻辑**: `lib/`目录 - **功能模块**: `modules/`目录 - **服务端**: `server/`目录 - **数据库**: `prisma/`目录 - **静态资源**: `assets/`目录 ### 命名规范 - **Vue组件**: PascalCase(如`AppButton.vue`) - **TypeScript文件**: camelCase(如`order-utils.ts`) - **数据库模型**: PascalCase(如`Admin`、`Order`) - **数据库字段**: camelCase(如`createdAt`、`paymentStatus`) ### TypeScript 类型引用规范 所有类型引用**必须在文件顶部使用 `import type` 导入**,禁止在变量声明、函数参数、泛型等位置使用内联 `import()` 写法。 ```typescript // bad:禁止内联引用 function handle(data: import("./types").SomeType) { ... } // good:顶部统一导入 import type { SomeType } from "./types"; function handle(data: SomeType) { ... } ``` ### 组件开发规范 **优先使用全局组件**:开发新功能前,先查看 `docs/components.md` 中是否已有可复用的组件。优先使用项目提供的全局组件,没有的才自己开发。 常用全局组件: - `AppButton`: 统一按钮,支持 loading、variant、href 等 - `SecretInput`: 密码/密钥输入框,支持显示/隐藏 - `StatusTag`: 状态标签 - `ConfirmDialog`: 确认对话框 - `DataTable`: 数据表格 - `FilePickerModal`: 文件选择弹窗 **开发新组件时**: - 使用`