项目结构
项目结构
生成项目按职责分层。业务页面放在 app 和 features,可组合规则放在
core/modules,供应商差异放在 adapters,业务统一从 services 调用外部能力。
核心目录
src/
├── app/ # 页面、Layout、API、webhook、health
├── core/modules/ # 模块契约与校验
├── core/services/ # 支付、邮件、存储、AI、任务、限流契约
├── modules/ # 当前生成项目的模块注册表
├── adapters/ # 当前选中的供应商实现
├── services/ # 业务层使用的服务实例
├── features/ # 产品功能模块
├── db/schema/ # 按模块拆分的 Drizzle Schema
├── content/ # 文档、博客和法律页 MDX
├── config/ # 站点、导航、价格和套餐
└── test/ # 核心逻辑和集成测试
生成与选择
| 路径 | 作用 |
|---|---|
nextdevtpl.generated.json | 当前项目实际模块、适配器、目标和 catalog 版本 |
src/modules/registry.ts | 运行时代码能看到的模块清单 |
src/adapters/registry.ts | 当前适配器声明和环境要求 |
.env.example | 按生成选择留下的环境变量 |
模板仓库还包含 recipes/catalog.json、templates/base/manifest.json、
packages/create-nextdevtpl 和 tests/compatibility。普通生成项目不会携带这些
生成器维护文件。
路由
src/app/
├── [locale]/
│ ├── (marketing)/ # 首页、定价、博客、法律页、PSEO
│ ├── (auth)/ # 登录、注册、找回密码
│ ├── (dashboard)/ # 用户工作台、积分、设置、工单
│ ├── (admin)/ # 管理后台
│ └── docs/ # Fumadocs 文档
└── api/
├── auth/ # Better Auth
├── webhooks/payment # 当前支付适配器的统一 webhook
├── upload/ # 预签名上传
├── jobs/ # 受保护 cron
└── health/ # 部署健康检查
生成器会删除未选模块对应的路由。直接访问缺失路由得到 404 属于预期行为。
改代码时放哪里
| 改动 | 目录 |
|---|---|
| 页面或业务流程 | src/features/<模块> 与对应 src/app 路由 |
| 外部供应商 API | src/adapters/<服务> |
| 业务调用的统一入口 | src/services/<服务>.ts |
| 新模块声明 | src/features/<模块>/manifest.ts |
| 数据表 | src/db/schema/<分组>.ts |
| UI 文案 | messages/en.json、messages/zh.json |
| 文档 | src/content/docs/en、src/content/docs/zh |
| 部署 | deploy/、Dockerfile、compose.yaml、vercel.json、wrangler.jsonc |
业务代码优先依赖 src/services 和公开模块出口,避免跨目录导入适配器内部文件。