GitHub Stars Search 是一个自动获取用户 GitHub Star 仓库信息并在网页上展示的工具。它包含两个主要部分:
- GitHub Action:定期从 GitHub API 获取用户 Star 的仓库信息
- 前端页面:用于浏览和搜索这些仓库
- 后端: GitHub Actions, Node.js 24, Octokit, GraphQL
- 前端: React 18, Vite, TypeScript, CSS3, FlexSearch
- 部署: GitHub Pages
- 包管理: pnpm
github-stars-search/
├── action/ # GitHub Action 源码
│ ├── src/
│ │ ├── index.ts # Action 主要逻辑
│ │ └── modules/ # Action 模块化代码
│ │ └── types/ # TypeScript 类型定义
│ ├── action.yml # Action 配置
│ └── package.json
├── src/ # 前端源码
│ ├── App.tsx # 主要组件
│ ├── types.ts # 前端类型定义
│ ├── store/ # Jotai 状态管理
│ └── ...
├── docs/ # 构建输出和 GitHub Pages
├── .github/workflows/ # GitHub Actions 工作流
└── scripts/ # 测试和模拟脚本
graph TD
A[触发工作流] --> B[加载配置]
B --> C[验证配置]
C --> D[获取Star仓库数据]
D --> E[处理数据]
E --> F[保存完整数据]
F --> G[生成简化数据]
G --> H[设置输出参数]
- api.ts: GraphQL API 集成
- config.ts: 配置管理
- core.ts: 主处理逻辑
- rateLimit.ts: 速率限制处理
- utils.ts: 工具函数
| 参数 | 描述 | 默认值 |
|---|---|---|
github-token |
GitHub 认证令牌 | ${{ github.token }} |
username |
要获取 Star 仓库的用户名 | ${{ github.actor }} |
output-file |
保存完整仓库数据的文件路径 | ./starred-repos.json |
simple-output-file |
保存简化仓库数据的文件路径 | ./starred-repos-simple.json |
使用 Jotai 进行状态管理,关键状态:
sortByAtom: 排序字段sortOrderAtom: 排序方向showSettingsAtom: 设置显示状态expandedReposAtom: 仓库详情展开状态dataUrlAtom: 数据文件URL
- Web Worker:
search.worker.ts处理搜索逻辑 - FlexSearch: 高性能搜索库
- 搜索流程:
- 初始化 FlexSearch
- 构建索引
- 执行搜索
- 返回结果
export interface Repository {
id: number;
name: string;
full_name: string;
html_url: string;
description: string | null;
language: string | null;
languages: Record<string, {
bytes: number;
percentage: string;
}>;
stargazers_count: number;
forks_count: number;
// ...其他字段
}pnpm install
pnpm run devpnpm run build# 安装依赖
pnpm install
# 启动开发服务器
pnpm run dev
# 构建生产版本
pnpm run build
# 预览构建结果
pnpm run preview
# 类型检查
pnpm run type-check
# 代码格式化
pnpm run format
# 代码检查
pnpm run lint
# 运行测试
pnpm run test
# 运行GraphQL查询测试
pnpm run test:graphql
# 模拟Action执行
pnpm run simulate:action- App.tsx: 主组件,处理数据加载和状态管理
- search.worker.ts: Web Worker 搜索实现
- store/atoms.ts: 状态管理
- App.scss: 样式定义
# 进入action目录
cd action
# 安装依赖
pnpm install
# 构建Action
pnpm run build- GraphQL 查询: 优化查询字段,减少数据量
- 速率限制处理: 实现指数退避策略
- 错误处理: 处理各种 API 错误
- 数据处理: 转换 GitHub API 数据为前端可用格式
- 状态管理: 使用 Jotai 进行细粒度状态管理
- 性能优化:
- 使用 Web Worker 处理搜索
- 实现无限滚动加载
- 按需加载数据
- 响应式设计: 适配桌面和移动设备
- 速率限制处理:
- 实现指数退避策略
- 监控速率限制头部
- 递减请求大小
- 错误处理:
- 详细记录错误信息
- 实现重试机制
- 提供清晰的错误消息
- 数据处理:
- 去重处理
- 数据转换
- 生成简化版本
- 解决方案:
- 实现指数退避重试
- 递减请求大小
- 监控速率限制头部
- 解决方案:
- 使用 Web Worker 处理搜索
- 实现数据缓存
- 提供手动刷新功能
- 解决方案:
- 实现无限滚动
- 按需加载数据
- 优化搜索索引
- 确定功能需求
- 设计数据结构
- 实现前端组件
- 添加状态管理
- 编写测试
- 前端调试:
- 使用 React DevTools
- 检查 Web Worker 日志
- 使用浏览器性能分析工具
- Action 调试:
- 使用
simulate-action.cjs脚本 - 检查 GitHub Actions 日志
- 添加详细日志输出
- 使用
- 构建前端:
pnpm run build - 将构建结果复制到
docs/目录 - 在仓库设置中启用 GitHub Pages
- 通过设置浮窗配置自定义数据文件URL
- 支持 JSON 格式的数据文件
本开发指南专为 AI 开发者设计,提供了项目结构、技术栈、核心组件和开发流程的详细说明,帮助 AI 快速理解和开发 GitHub Stars Search 项目。