首先,非常感谢你考虑为 KWDB Playground 做出贡献!正是因为有你们,开源社区才如此繁荣。
KWDB Playground 是一个全栈交互式课程平台,后端采用 Go 1.25 (Gin, Docker SDK, WebSocket),前端采用 React 18 (TypeScript, Vite, Tailwind),并依赖 Docker 运行隔离的课程容器环境。
请按照以下步骤在本地运行该项目:
- Go: >= 1.25
- Node.js: 推荐 >= 20
- 包管理器: pnpm (前端), Go modules (后端)
- Docker: 必须安装并运行 Docker 守护进程 (Docker Desktop 或 Docker Engine)
- Make: 用于执行构建和本地开发脚本
- Fork 本仓库并克隆到本地:
git clone https://github.com/<your-username>/playground.git cd playground
- 安装前后端依赖:
make install
启动前后端开发服务(带有热重载):
make dev启动后,本地页面可通过 http://localhost:3006 访问。请勿直接使用 npm 启动。
cmd/: CLI 命令入口 (start, stop, check 等)internal/: 后端 Go 核心逻辑 (api, docker, course, websocket 等)src/: 前端 React 源码 (pages, components, store, hooks 等)courses/: 课程内容文档 (YAML + MD 格式)docker/: 课程运行时依赖的 Docker 镜像配置tests/playwright/: 端到端 (E2E) 测试
- 导入顺序:
React→@/*绝对路径 → 相对路径 - 命名规范: 组件使用
PascalCase,自定义 Hook 使用use*,Zustand Store 使用*Store - 样式: 使用
cn()辅助函数拼接 Tailwind 类名 - TypeScript:
tsconfig中strict模式为false,但仍建议尽量提供清晰的类型定义
- 导入顺序: 标准库 → 外部依赖库 → 内部包 (
internal/*) - 错误处理: 统一使用
fmt.Errorf("action: %w", err)包装错误 - 日志记录: 日志信息使用中文,标识符使用英文
在提交代码之前,请确保所有测试用例都能通过。本项目包含后端单元测试、前端单元测试以及 E2E 测试:
# 运行 Go 后端单元测试
go test ./...
# 运行前端 Vitest 单元测试
pnpm run test:unit
# 运行 Playwright 端到端测试 (串行执行)
make e2e-playwright如需在本地构建单文件可执行二进制包(内嵌前端静态资源):
make release- 确保你的代码基于最新的
main分支:git checkout main && git pull - 从
main分支创建一个新分支:git checkout -b feature/你的特性名称(或fix/你的修复名称) - 编写代码并提交。建议使用 约定式提交 (Conventional Commits) 规范。
- 推送到你的 Fork 仓库:
git push origin feature/你的特性名称 - 向我们的
main分支发起 Pull Request。 - 在 PR 描述中清晰地说明你的改动动机、实现细节以及任何需要注意的地方。
参与本项目的开发即表示你同意遵守我们的行为准则。请尊重所有的维护者和其他贡献者,保持友善和建设性的交流。