mercur贡献指南:如何提交Pull Request
🎯 为什么贡献mercur?
mercur是一个基于MedusaJS构建的开源多供应商市场平台,支持B2B和B2C商业模式。作为贡献者,你将:
- 🛠️ 参与现代电商平台开发
- 📈 学习微服务架构和模块化设计
- 🌐 加入活跃的开源社区
- 💼 获得真实项目经验
📋 贡献前准备
环境要求
# 系统要求
Node.js v20+
PostgreSQL 12+
Git CLI
Yarn包管理器
# 克隆仓库
git clone https://gitcode.com/GitHub_Trending/me/mercur.git
cd mercur
# 安装依赖
yarn install
# 构建包
yarn build
项目结构了解
🔧 设置开发环境
1. 数据库配置
# 进入后端目录
cd apps/backend
# 复制环境变量模板
cp .env.template .env
# 配置数据库连接
DATABASE_URL=postgres://username:password@localhost:5432/mercur_db
2. 数据库初始化
# 创建数据库并运行迁移
yarn medusa db:create && yarn medusa db:migrate
# 运行种子数据
yarn run seed
# 创建管理员用户
npx medusa user --email admin@example.com --password yourpassword
3. 启动开发服务器
# 返回根目录
cd ../..
# 启动开发服务器
yarn dev
🎯 寻找贡献机会
常见贡献类型
| 贡献类型 | 难度 | 适合人群 | 示例 |
|---|---|---|---|
| Bug修复 | ⭐⭐ | 初学者 | 修复CHANGELOG中的已知问题 |
| 功能增强 | ⭐⭐⭐ | 中级开发者 | 添加新的API端点 |
| 文档改进 | ⭐ | 所有人 | 完善README或注释 |
| 测试用例 | ⭐⭐ | 质量保证 | 添加单元测试 |
| 性能优化 | ⭐⭐⭐⭐ | 高级开发者 | 优化数据库查询 |
查看现有Issue
检查GitHub Issues页面,寻找:
good first issue标签 - 适合新手bug标签 - 需要修复的问题enhancement标签 - 功能改进建议
📝 代码规范与要求
代码风格
// ✅ 正确的命名规范
interface IOrderService {
createOrder(orderData: OrderDTO): Promise<Order>;
}
// ❌ 避免的写法
function makeOrder(data) {
// 缺少类型声明
}
提交信息规范
# ✅ 符合规范的提交信息
git commit -m "feat(orders): add bulk order creation endpoint"
# ❌ 不规范的提交信息
git commit -m "fixed some stuff"
提交类型说明
| 类型 | 说明 | 示例 |
|---|---|---|
| feat | 新功能 | feat(products): add variant management |
| fix | bug修复 | fix(cart): resolve quantity calculation |
| docs | 文档更新 | docs(readme): update installation guide |
| style | 代码格式 | style(api): format import statements |
| refactor | 代码重构 | refactor(utils): optimize money conversion |
| test | 测试相关 | test(orders): add unit tests for validation |
| chore | 构建过程 | chore(deps): update package dependencies |
🚀 创建Pull Request流程
1. Fork仓库
# Fork mercur仓库到你的账户
# 然后克隆你的fork
git clone https://gitcode.com/your-username/mercur.git
cd mercur
# 添加上游仓库
git remote add upstream https://gitcode.com/GitHub_Trending/me/mercur.git
2. 创建特性分支
# 从main分支创建新分支
git checkout main
git pull upstream main
git checkout -b feat/your-feature-name
# 或者修复bug
git checkout -b fix/issue-number-description
3. 开发与测试
# 确保代码通过所有测试
yarn test
# 检查代码格式
yarn lint
# 构建项目验证
yarn build
4. 提交更改
# 添加修改的文件
git add .
# 提交符合规范的commit
git commit -m "feat(module): description of changes"
# 推送到你的fork
git push origin feat/your-feature-name
5. 创建Pull Request
在GitHub界面:
- 切换到你的特性分支
- 点击"Compare & pull request"
- 填写PR描述模板
- 关联相关Issue
- 请求代码审查
📋 PR描述模板
## 变更描述
[简要描述所做的更改]
## 变更类型
- [ ] Bug修复
- [ ] 新功能
- [ ] 代码重构
- [ ] 文档更新
- [ ] 其他(请说明)
## 相关Issue
closes #123
## 测试验证
- [ ] 单元测试通过
- [ ] 集成测试通过
- [ ] 手动测试验证
## 截图/示例
[如有UI变更,请添加截图]
## checklist
- [ ] 代码遵循项目规范
- [ ] 添加了必要的测试
- [ ] 文档已更新
- [ ] commit信息符合规范
🧪 测试要求
单元测试
// 示例:订单服务测试
describe('OrderService', () => {
it('should create order with valid data', async () => {
const orderData = { /* 测试数据 */ };
const result = await orderService.create(orderData);
expect(result).toHaveProperty('id');
});
});
集成测试
确保新功能与现有模块集成正常,特别是:
- 数据库操作
- API端点
- 事件订阅器
- 工作流处理
🔍 代码审查要点
审查清单
| 检查项 | 说明 |
|---|---|
| 代码质量 | 符合TypeScript最佳实践 |
| 测试覆盖 | 包含单元测试和集成测试 |
| 文档更新 | README和代码注释已更新 |
| 性能影响 | 不影响现有性能 |
| 向后兼容 | 不破坏现有API |
常见审查反馈
// 审查建议示例
// ✅ 建议:使用async/await代替Promise链
async function getOrderDetails(orderId: string) {
const order = await orderRepo.findById(orderId);
return order;
}
// ❌ 待改进:嵌套的回调函数
function getOrderDetails(orderId: string) {
return orderRepo.findById(orderId).then(order => {
return order;
});
}
🎉 成功合并后
庆祝你的贡献
- 🎊 你的代码将成为mercur的一部分
- 📊 在CHANGELOG.md中记录贡献
- 👥 加入mercur贡献者社区
- 🚀 继续参与更多有趣的功能开发
后续步骤
- 关注PR的合并状态
- 查看CHANGELOG确认贡献记录
- 考虑参与下一个Issue
- 帮助审查其他PR
💡 高级贡献技巧
模块开发模式
mercur采用模块化架构,新功能通常以模块形式添加:
性能优化贡献
对于性能相关的贡献,关注:
- 数据库查询优化
- 缓存策略实现
- 批量操作支持
- 异步处理优化
🤝 社区支持
获取帮助
- 📖 查阅mercur文档
- 💬 加入社区讨论
- 🐛 报告问题时提供详细重现步骤
- 🔧 寻求代码审查建议
行为准则
遵循开源社区行为准则:
- 尊重所有社区成员
- 建设性反馈
- 帮助其他贡献者
- 共享知识和经验
开始你的mercur贡献之旅吧!每一个PR都是对开源社区的重要贡献。🎯
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



