Skip to content
This repository was archived by the owner on May 11, 2026. It is now read-only.

ClosedWHU/WHU-Dugout-App

Repository files navigation

Dugout App

这是 Dugout 的移动端与 Web 客户端,基于 Expo Router 构建,统一承载论坛浏览、发帖、管理和设置页面。

当前客户端采用以下技术栈:

  • Expo + React Native
  • Expo Router 进行文件路由
  • Tamagui 作为组件和主题系统
  • pnpm workspace 管理本地共享包
  • TypeScript + Vitest + ESLint 作为开发质量工具

项目结构

  • src/app/:路由入口,页面按文件名映射到路由
  • src/components/:客户端通用组件
  • src/lib/:会话、主题、时间等运行时工具
  • packages/api/:后端 API 封装
  • packages/domain/:领域类型与共享数据结构
  • packages/i18n/:国际化资源与文案定义
  • tamagui.config.ts:Tamagui 主题和 token 配置
  • tailwind.config.jsnativewind-env.d.ts:样式系统相关配置
  • app.json:Expo 应用配置

路由概览

当前页面入口位于 src/app/

  • index.tsx:首页
  • compose.tsx:发帖页
  • admin.tsx:管理页
  • settings.tsx:设置页
  • post/[id].tsx:帖子详情页
  • _layout.tsx:全局布局、主题、国际化和会话提供器

运行环境

前置条件

  • Node.js 20+
  • pnpm 9+
  • Expo Go、Android 模拟器、iOS 模拟器或浏览器
  • 可访问的后端 server 服务

环境变量

客户端默认通过环境变量连接后端:

  • EXPO_PUBLIC_API_BASE_URL:后端地址,默认 http://localhost:8080
  • EXPO_PUBLIC_ADMIN_TOKEN:管理接口令牌,默认 dev-admin-token

如果后端地址发生变化,请同步更新该变量。

本地启动

pnpm install
pnpm start

常见开发入口:

# Android
pnpm android

# iOS
pnpm ios

# Web
pnpm web

常用脚本

  • pnpm start:启动 Expo 开发服务
  • pnpm android:启动 Android 设备或模拟器
  • pnpm ios:启动 iOS 设备或模拟器
  • pnpm web:启动 Web 调试模式
  • pnpm build:web:导出 Web 产物
  • pnpm lint:静态检查
  • pnpm typecheck:类型检查
  • pnpm test:执行 Vitest 测试

与后端联调

客户端依赖 server 提供的接口,至少需要以下能力:

  • GET /api/v1/bootstrap
  • GET /api/v1/settings
  • PATCH /api/v1/settings
  • GET /api/v1/boards
  • POST /api/v1/boards
  • PATCH /api/v1/boards/{id}
  • DELETE /api/v1/boards/{id}
  • GET /api/v1/feed
  • GET /api/v1/posts/search
  • POST /api/v1/auth/register
  • POST /api/v1/auth/login
  • GET /api/v1/auth/me

开发说明

布局与上下文

src/app/_layout.tsx 负责初始化以下上下文:

  • TamaguiProvider
  • I18nProvider
  • SessionProvider
  • SafeAreaProvider
  • Stack 路由布局

这意味着页面层应尽量保持纯 UI 和轻逻辑,不要在页面中重复创建全局提供器。

共享包

工作区中的共享包是客户端代码复用的核心:

  • @dugout/api:请求后端接口
  • @dugout/domain:共享模型和类型
  • @dugout/i18n:中英文资源和翻译函数

修改这些包时,要同步检查 src/ 下的页面和组件是否仍然兼容。

测试与质量

建议在提交前至少执行:

pnpm lint
pnpm typecheck
pnpm test

如果修改了页面路由或全局布局,建议额外执行:

pnpm web

说明

  • 该客户端默认使用中文界面资源
  • 当前布局和主题以 Tamagui 为核心,不要直接依赖默认 RN 组件风格覆盖整体视觉
  • 如果后端接口结构变化,优先同步 packages/apipackages/domain

Dugout App (Expo Router)

This client intentionally follows the same stack direction as whu.sb/app (not app-legacy):

  • Expo + React Native
  • Expo Router (file-based routing)
  • pnpm workspace packages under packages/*
  • Tamagui component system

Structure

  • src/app: route entries
  • src/app/settings.tsx: Tamagui-based runtime config/board management client
  • tamagui.config.ts: Tamagui theme and token configuration
  • packages/domain: shared domain types
  • packages/api: HTTP client for server APIs

Environment variables

Set these before running:

  • EXPO_PUBLIC_API_BASE_URL (default: http://localhost:8080)
  • EXPO_PUBLIC_ADMIN_TOKEN (default: dev-admin-token)

Run

Initialize workspace submodules first:

git submodule update --init --recursive
pnpm install
pnpm start

For web preview:

pnpm web

Connected server APIs

  • GET /api/v1/bootstrap
  • PATCH /api/v1/settings
  • POST /api/v1/boards
  • PATCH /api/v1/boards/{id}

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Contributors