感谢你考虑为 CodeFrame 做贡献!
请阅读并遵守我们的行为准则,确保项目社区对所有人友好开放。
如果你发现了 Bug,请通过 GitHub Issues 提交报告。
提交前请:
- 搜索现有 Issues,确认没有重复
- 使用 Bug 报告模板
- 提供清晰的复现步骤
欢迎提出新功能建议!请:
- 通过 Issues 描述你的想法
- 说明使用场景和预期效果
- 等待讨论和反馈
- Fork 本仓库
- 创建功能分支 (
git checkout -b feature/amazing-feature) - 提交更改 (
git commit -m 'feat: add amazing feature') - 推送到分支 (
git push origin feature/amazing-feature) - 创建 Pull Request
- Node.js 18+
- pnpm 8+
# 克隆仓库
git clone https://github.com/xie392/CodeFrame.git
cd CodeFrame
# 安装依赖
pnpm install
# 启动开发服务器
pnpm dev| 命令 | 说明 |
|---|---|
pnpm dev |
启动开发服务器 |
pnpm build |
构建生产版本 |
pnpm test |
运行测试 |
pnpm test:coverage |
运行测试并生成覆盖率报告 |
pnpm lint |
代码检查 |
pnpm typecheck |
类型检查 |
- 运行
pnpm build生成dist目录 - 打开 Chrome,访问
chrome://extensions/ - 启用「开发者模式」
- 点击「加载已解压的扩展程序」
- 选择项目的
dist目录
| 类型 | 规范 | 示例 |
|---|---|---|
| 变量/函数 | camelCase | getUserById |
| 常量 | UPPER_SNAKE_CASE | MAX_COUNT |
| 组件/类型 | PascalCase | Button |
| 文件名 | kebab-case | user-card.tsx |
- 单行长度 ≤ 80 字符
- 圈复杂度 ≤ 5
- 函数长度 ≤ 50 行
- 禁止
any类型 - 纯函数优先
- 早返回,避免嵌套
项目使用 ESLint + Prettier 保持代码风格一致:
# 检查代码
pnpm lint
# 自动修复
pnpm lint:fix
# 格式化代码
pnpm format本项目遵循 Conventional Commits 规范:
<type>(<scope>): <subject>
<body>
<footer>
| 类型 | 说明 |
|---|---|
feat |
新功能 |
fix |
Bug 修复 |
docs |
文档更新 |
style |
代码格式(不影响功能) |
refactor |
重构 |
test |
测试相关 |
chore |
构建/工具相关 |
feat(editor): 添加箭头标注工具
fix(screenshot): 修复区域截图偏移问题
docs: 更新安装文档- 代码通过
pnpm lint检查 - 代码通过
pnpm typecheck类型检查 - 所有测试通过
pnpm test - 新功能有对应测试
- 提交信息符合规范
使用与提交信息相同的格式:
feat(scope): 简短描述
- 自动检查(CI)通过
- 至少一位维护者审核
- 合并到
dev分支
src/
├── background/ # Service Worker(扩展后台)
├── popup/ # 弹出窗口(主入口)
├── editor/ # 图片标注编辑器
├── codegen/ # 代码美化生成器
├── content/ # Content Scripts
├── options/ # 设置页面
├── shared/ # 共享模块
│ ├── components/ # 公共组件
│ ├── hooks/ # 公共 Hooks
│ ├── stores/ # 公共状态
│ └── utils/ # 工具函数
└── types/ # 类型定义
如果你有任何问题,可以:
- 在 Discussions 发起讨论
- 在 Issue 中提问
感谢你的贡献!