感谢您对本项目的关注!我们欢迎各种形式的贡献,包括但不限于代码、文档、问题报告和功能建议。
本项目采用 Contributor Covenant 行为准则。参与本项目即表示您同意遵守其条款。
- 营造开放、友好、多元、包容的环境
- 尊重不同观点和经验
- 接受建设性批评
- 关注对社区最有利的事情
- 对其他社区成员表示同理心
-
代码贡献
- 修复 bug
- 实现新功能
- 性能优化
- 重构代码
-
文档贡献
- 改进现有文档
- 添加缺失的文档
- 翻译文档
- 修复文档中的错误
-
测试贡献
- 编写单元测试
- 编写集成测试
- 改进测试覆盖率
- 性能测试
-
其他贡献
- 报告 bug
- 提出功能建议
- 参与讨论
- 代码审查
- Node.js 18+ 和 npm/yarn
- Go 1.21+
- Python 3.9+
- Docker 和 Docker Compose
- Git
-
克隆仓库
git clone <repository-url> cd education-project
-
环境配置
# 复制环境变量模板 cp code/.env.example code/.env # 运行环境配置脚本 ./code/scripts/setup-env.sh
-
启动开发环境
# 启动所有服务 ./code/scripts/dev-up.sh # 或者使用 Docker Compose cd code docker-compose up -d
-
验证安装
- 前端:http://localhost:5173
- 后端 API:http://localhost:8080
- AI 服务:http://localhost:8001
- 仿真服务:http://localhost:8002
education-project/
├── code/ # 代码库
│ ├── frontend/ # Web 前端(默认)
│ ├── backend/ # Go 后端
│ ├── ai_service/ # Python AI 服务
│ ├── simulation/ # Python 仿真服务
│ ├── mobile/ # 移动端(Expo,可选)
│ ├── shared/ # 共享资源
│ ├── deployment/ # 部署配置
│ └── scripts/ # 构建脚本
├── academic/ # 学术材料
├── docs/ # 技术文档
└── assets/ # 静态资源
- 使用 UTF-8 编码
- 使用 Unix 风格的换行符 (LF)
- 文件末尾保留一个空行
- 移除行尾空格
- 使用有意义的变量和函数名
- 添加必要的注释
- 遵循 React 社区最佳实践(组件职责单一、hooks 管理副作用、避免过度状态提升)
- 使用 TypeScript 严格模式
- 组件名使用 PascalCase,hooks 使用
useXxx命名 - 文件名与目录名保持一致的工程风格(组件/页面 PascalCase,工具与 hooks camelCase/kebab-case 均可,但需统一)
- 使用 ESLint 和 Prettier
// 好的示例
interface UserProfile {
id: number;
name: string;
email: string;
}
const fetchUserProfile = async (userId: number): Promise<UserProfile> => {
// 实现逻辑
};- 遵循 Go 代码规范
- 使用
gofmt格式化代码 - 使用
golint检查代码 - 包名使用小写单词
- 导出的函数和变量使用 PascalCase
// 好的示例
type UserService struct {
repo UserRepository
}
func (s *UserService) GetUserByID(ctx context.Context, id int64) (*User, error) {
// 实现逻辑
}- 遵循 PEP 8
- 使用
black格式化代码 - 使用
flake8检查代码 - 使用类型提示
- 函数和变量使用 snake_case
# 好的示例
from typing import Optional
def get_user_profile(user_id: int) -> Optional[dict]:
"""获取用户配置文件"""
# 实现逻辑
pass我们使用 Conventional Commits 规范:
<类型>[可选的作用域]: <描述>
[可选的正文]
[可选的脚注]
feat: 新功能fix: 修复 bugdocs: 文档变更style: 代码格式变更(不影响代码运行)refactor: 重构(既不是新增功能,也不是修复 bug)perf: 性能优化test: 添加或修改测试chore: 构建过程或辅助工具的变动
feat(auth): 添加用户登录功能
实现了基于 JWT 的用户认证系统,包括:
- 用户注册和登录接口
- JWT token 生成和验证
- 中间件保护需要认证的路由
Closes #123-
Fork 仓库
- 点击 GitHub 上的 "Fork" 按钮
-
创建功能分支
git checkout -b feature/your-feature-name
-
开发和测试
- 编写代码
- 添加测试
- 确保所有测试通过
- 更新文档
-
提交变更
git add . git commit -m "feat: 添加新功能" git push origin feature/your-feature-name
-
创建 Pull Request
- 在 GitHub 上创建 PR
- 填写 PR 模板
- 等待代码审查
-
代码审查
- 响应审查意见
- 进行必要的修改
- 保持 PR 更新
-
合并
- PR 被批准后将被合并
- 删除功能分支
- 代码遵循项目规范
- 添加了必要的测试
- 所有测试通过
- 更新了相关文档
- 提交消息符合规范
- 没有合并冲突
使用 GitHub Issues 报告 bug,请包含:
-
Bug 描述
- 清晰简洁的描述
-
重现步骤
- 详细的重现步骤
- 预期行为
- 实际行为
-
环境信息
- 操作系统
- 浏览器版本
- Node.js/Go/Python 版本
-
附加信息
- 截图或录屏
- 错误日志
- 相关配置
## Bug 描述
简要描述遇到的问题
## 重现步骤
1. 进入 '...'
2. 点击 '....'
3. 滚动到 '....'
4. 看到错误
## 预期行为
描述你期望发生的情况
## 实际行为
描述实际发生的情况
## 环境信息
- OS: [例如 macOS 12.0]
- Browser: [例如 Chrome 95.0]
- Version: [例如 1.0.0]
## 附加信息
添加任何其他有助于解释问题的信息使用 GitHub Issues 提出功能建议,请包含:
-
功能描述
- 清晰的功能描述
- 使用场景
-
解决的问题
- 这个功能解决什么问题
- 为什么需要这个功能
-
建议的解决方案
- 你认为应该如何实现
- 可能的替代方案
-
附加信息
- 相关资料或参考
- 实现的优先级
- GitHub Issues: 问题报告和功能建议
- GitHub Discussions: 一般讨论和问答
- Email: [维护者邮箱]
如果你需要帮助:
- 查看现有文档
- 搜索已有的 Issues
- 在 GitHub Discussions 提问
- 联系维护者
通过贡献代码,您同意您的贡献将在与项目相同的许可证下授权。
感谢所有为本项目做出贡献的开发者!
再次感谢您的贡献!🎉