本文档提供了 RealWorld 仓库组织结构和目录结构的详细概述。它解释了主要目录、它们的作用以及它们如何组合形成完整的系统。有关项目设置和运行的信息,请参阅 开始使用。
RealWorld 仓库被组织成一个单体仓库(monorepo),其中包含多个相关项目,并且不同组件之间有清晰的职责划分。这是高层级的目录结构:
| 目录 | 目的 |
|---|---|
apps/ | 包含单体仓库中可运行的应用 |
apps/api/ | 使用 Nitro 和 Prisma 的参考 API 实现 |
apps/documentation/ | 使用 Astro/Starlight 构建的文档站点 |
api/ | API 规范文件和测试工具 |
.github/ | 用于 CI/CD 和 issue 模板的 GitHub 特定文件 |
media/ | 图片和其他媒体资源 |
来源:README.md package.json api/openapi.yml
RealWorld 仓库使用 pnpm workspaces 和 Turbo 进行构建编排,采用了单体仓库(monorepo)架构。这种结构允许在包之间共享代码,同时保持职责分离。
来源:package.json apps/api/package.json
该单体仓库使用 Turbo 进行高效的构建编排
主要的 API 应用位于 apps/api 目录中,提供了 Conduit API 规范的 RESTful 实现。
来源:apps/api/package.json apps/api/prisma/migrations/20241009081140_init/migration.sql
API 应用有多个用于开发和数据库管理的脚本
项目使用 Prisma 作为 ORM(对象关系映射)工具,并将 SQLite 作为开发数据库。数据库模式定义在 Prisma 模式文件中,并包含几个关键模型。
来源:apps/api/prisma/migrations/20241009081140_init/migration.sql1-96 apps/api/prisma/dev.db
数据库模式定义了实体之间几个重要的关系
用户-文章关系:
用户-用户关系:
文章-评论关系:
文章-标签关系:
来源:apps/api/prisma/migrations/20241009081140_init/migration.sql42-65
API 规范在 api/openapi.yml 文件中以 OpenAPI 格式定义。此规范定义了所有端点、请求/响应格式和认证要求,用于实现 Conduit API。
Conduit API 包含以下主要端点组
| 端点组 | 目的 | 身份验证 |
|---|---|---|
/users | 用户注册和认证 | 部分 |
/user | 当前用户管理 | 必填 |
/profiles/{username} | 用户资料访问 | 可选 |
/articles | 文章创建和检索 | 部分 |
/articles/feed | 个性化文章 Feed | 必填 |
/articles/{slug}/comments | 文章评论 | 部分 |
/articles/{slug}/favorite | 文章点赞 | 必填 |
/tags | 标签列表 | 不需要 |
该仓库包含用于持续集成、issue 模板和其他 GitHub 功能的 GitHub 特定配置。
来源:.github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml .github/ISSUE_TEMPLATE/BUG_REPORT.yml .github/CODEOWNERS
处理 RealWorld 仓库的典型开发工作流程涉及几个步骤,如下图所示:
来源:package.json24-29 README.md24-26
该项目在不同方面使用了几个关键依赖项
| 依赖项 | 目的 |
|---|---|
@prisma/client | 用于数据库访问的 ORM |
nitropack | 服务器框架 |
bcryptjs | 密码哈希 |
jsonwebtoken | JWT令牌处理 |
slugify | 文章的 Slug 生成 |
RealWorld 仓库被构建为一个单体仓库,API 规范、参考实现和支持工具之间有清晰的划分。这种组织结构保证了代码的可维护性、组件之间清晰的边界以及代码库中可重用的模式。
项目结构促进了
有关如何开始开发的更多信息,请参阅 开始使用。