ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Star History 项目实战指南:基于 Next.js 的开源 GitHub Star 趋势图与 SVG 图表嵌入方案

Star History 项目实战指南:基于 Next.js 的开源 GitHub Star 趋势图与 SVG 图表嵌入方案 开发工具数据可视化【免费下载链接】star-historyThe de facto GitHub star history graph.项目地址https://gitcode.com/gh_mirrors/st/star-history点击查看免费下载本指南以 star-history 仓库为核心系统讲解这款 de facto GitHub star history graph 工具的整体架构从前端图表交互、实时图表与全局排名徽章的嵌入方式到本地开发环境搭建、Chrome 扩展构建再到用于生成可嵌入 README 的 SVG 图表的 API Server 及其参数体系。读完本文你将掌握如何在本仓库基础上运行首页、构建扩展、部署实验性 API 服务并理解其底层数据抓取与缓存原理。项目定位与核心特性Star History 是一个专门为 GitHub 开源项目绘制 Star 增长趋势图的应用。仓库根目录的 README.md 给出了明确的定位描述——the de facto GitHub star history graph即业界事实标准的 GitHub Star 历史图工具。它同时提供在线网站、免费 Chrome 扩展以及可嵌入任意页面尤其是 GitHub README的实时 SVG 图表。从 README.md 的 Features 一节可以提炼出以下核心能力独特的手绘风格图表采用sketch xkcd手绘涂鸦质感的图表样式。仓库中 frontend/styles/xkcd.ttf 正是支撑这一视觉风格的自定义字体backend 侧的 backend/assets/xkcd.ttf 则用于服务端 SVG 渲染。一键生成高质量图表图片前端通过html-to-image类能力将图表导出为图片依赖见 frontend/package.json。多种图表视图模式支持基于日期date与基于时间线timeline两种坐标视图。该模式的类型定义位于 shared/types/chart.tsx 的ChartMode后端常量 backend/const.ts 也明确列出了CHART_TYPES [Date, Timeline]。将实时图表嵌入 GitHub README 或其他网站这是该项目最标志性的功能后文会结合源码详细展开。多种实用辅助功能仓库可见性开关、仓库输入快捷方式、快速分享到 Twitter、支持一次输入多个仓库对比等。首页交互部分由 frontend/pages/index.tsx 组织通过RepoInputer组件接收用户输入的仓库StarChartViewer组件负责图表的渲染、数据获取与交互见 frontend/components/StarChartViewer.tsx。实时图表与全局排名徽章把 Star 趋势图嵌入你的 READMEREADME 的顶部就嵌着两个活的示例一个是实时 Star History 图表另一个是带全局排名的徽章badge。它们都指向 star-history.com 在线服务本仓库不直接提供托管服务但完整给出了生成这类 SVG 的后端实现即下文会讲到的 API Server。想要在自己的仓库 README 中嵌入同样的实时图表可以参考仓库内的教程文档 frontend/public/blog/how-to-use-github-star-history.md。该文档详细介绍了如何获取嵌入代码并粘贴进 README 的完整流程README 中的 live 图表正是这一能力的直接展示。与嵌入能力配套的还有前端侧的功能支撑组件GenerateEmbedCodeDialog用于生成嵌入代码EmbedMarkdownSection用于展示 Markdown 片段它们都位于 frontend/components/ 目录下说明一键生成嵌入代码在前端是有完整交互实现的而非单纯的 README 宣传。本地开发环境搭建README 的 Development 章节给出了明确的开发指引并特别说明该项目不接受外部贡献We do not accept external contribution克隆后主要用于本地运行与学习。技术栈与前置要求项目基于现代前端技术栈构建Next.js首页与博客系统基于 frontend/pages/ 目录下的页面组织从 frontend/package.json 可以看到核心依赖next^14.1.0、react^18.2.0。TailwindCSS样式体系配置见 frontend/tailwind.config.js 与 frontend/styles/tailwind.css。d3 系列图表绘制底层使用d3-axis、d3-scale、d3-selection、d3-shape图表渲染核心实现在 shared/packages/xy-chart.tsx。前置要求仅有两项Node.js开发环境需要现代 Node.js 运行时项目声明packageManager: pnpm9.15.4建议配套较新版本。pnpm包管理器整个仓库的依赖锁定文件均为pnpm-lock.yaml。运行首页README 给出的命令非常简洁cd frontend pnpm i pnpm dev网站将在 http://localhost:3000 提供服务。从 frontend/package.json 的 scripts 可以看到dev实际执行的是pnpm run generate:blog next dev即先用tsx运行 frontend/scripts/generateBlogJson.mts 生成博客 JSON 数据再启动 Next.js 开发服务器。这意味着首次启动会经历一个博客静态数据的预生成过程之后才是常规的 Next.js 热更新开发。完整构建流程cd frontend pnpm i pnpm buildbuild脚本同样会先generate:blog随后执行next build next-sitemap。其中next-sitemap用于产出站点地图配置见 frontend/next-sitemap.config.js。构建完成后可用pnpm start即pnpm dlx serve out以静态服务方式对外提供产物。构建 Chrome 扩展Star History 同时提供一个免费的 Chrome 扩展支持基础的图表查看能力。README 给出的构建命令为cd frontend pnpm build:ext构建产物输出到./dist目录之后在 Chrome 的扩展管理页面chrome://extensions开启开发者模式选择加载已解压的扩展程序指向该dist文件夹即可完成安装。从源码看扩展的构建链路由 frontend/plugins/scripts/copyExtensionFiles.ts 负责它会将src/extension/background.js与src/extension/manifest.json拷贝到dist目录——扩展的清单文件manifest与后台脚本由此生成。同目录下的 frontend/plugins/scripts/emptyDist.ts 则负责在每次构建前清空dist确保产物干净。API Server生成可嵌入 README 的 SVG 图表README 将 API Server 明确标注为experimental feature实验性功能核心用途是为 GitHub README 生成可嵌入的图表 SVG 图片文件。启动方式cd backend pnpm i pnpm devAPI Server 将运行在 http://localhost:8080。从 backend/package.json 看dev脚本为tsx main.ts实际入口是 backend/main.ts服务基于Honohono^4.7.4框架构建使用hono/node-server提供 HTTP 服务并配合jsdomDOM 模拟、satori字体/OG 卡片渲染、svgoSVG 优化、lru-cache缓存与winston日志。SVG 图表接口的完整参数体系结合 backend/main.ts 的路由实现与 backend/const.ts 的常量定义/svg接口支持以下核心查询参数README 顶部 live 图表正是这种 URL 的直接应用参数说明取值与默认行为repos仓库列表逗号分隔必填例如reposstar-history/star-history每个仓库会被去空格、转小写并做 301 重定向规范化单次请求上限为MAX_REPOS_PER_REQUEST 20type图表视图类型date或timeline映射到ChartMode的Date/Timeline也兼容老式布尔参数date、timeline的存在性判断logscale对数刻度只要该参数存在且值不为false即启用对数坐标legend图例位置top-left默认或bottom-righttheme主题dark或light默认transparent透明背景true时输出透明背景 SVGsize图表尺寸必须属于CHART_SIZES [mobile, laptop, desktop]之一非法值回退为laptop宽度由 backend/utils.ts 的getChartWidthWithSize计算style卡片样式置为landscape1时返回 1200x630 的雷达图 OG 卡片见 backend/og-card.ts此时取第一个仓库并返回其排名与属性数据一个典型的请求示例源码注释中原样给出/svg?reposstar-history/star-historytypetimelinelogscalelegendbottom-right值得注意的设计细节路由在进入真正渲染前会先把repos参数规范化统一小写并做 301 跳转到规范化后的 URL。源码注释说明这是为了CDN 缓存效率——让 Cloudflare 对同一图表只缓存一份条目避免因大小写差异产生缓存碎片。从数据抓取到 SVG 输出的完整链路/svg的处理流程在 backend/main.ts 中清晰可读大致分为五步参数归一化与缓存查询将repos、type、size、theme、transparent、legendPosition、useLogScale拼成缓存 key命中svgCache则直接返回缓存 SVG。仓库数据命中判断遍历repos已缓存的仓库直接使用cache中的starRecords与logoUrl未命中的仓库进入数据抓取。GitHub API 抓取通过getRepoData定义于 shared/common/chart.tsx抓取 Star 记录MAX_REQUEST_AMOUNT 16控制单仓库的请求页数上限。仓库 Logo 会转为 Base64 内联进 SVG。JSDOM 模拟 DOM 并渲染创建JSDOM实例构造 SVG 根节点调用共享的XYChart渲染函数shared/packages/xy-chart.tsx绘制图表数据经convertDataToChartData转换。SVG 修正与优化fixJsdomSvgCasing修正 JSDOM 输出的大小写问题随后用svgo的multipass: true做多轮优化最终连同Cache-Control: public, s-maxage86400, max-age86400响应头返回。多级缓存与健康检查API Server 的缓存体系在 backend/cache.ts 中实现基于lru-cache分为三类starData 缓存仓库的 Star 记录与 Logo注释估算单仓库约 896 字节内存svgChart 缓存渲染并优化后的完整 SVGogCard 缓存landscape1卡片。每个缓存都统计命中/未命中次数/healthz端点会返回status、commit取环境变量GIT_COMMIT以及三类缓存的条目数、内存占用、命中率等统计信息便于监控与调优。前端数据获取GitHub API 分页采样原理Star History 之所以能高效绘制任意仓库的完整 Star 历史关键在于 shared/common/api.tsx 中getRepoStarRecords的分页采样算法前端首页与后端 SVG 服务都复用了这套逻辑先请求第一页stargazersper_page100配合Accept: application/vnd.github.v3.starjson头以拿到带starred_at时间戳的数据从响应的Link头解析总页数pageCount。若总页数小于maxRequestAmount前端默认 15见 shared/common/chart.tsx 的DEFAULT_MAX_REQUEST_AMOUNT后端为 16则全量并行拉取每一页。若仓库 Star 数极多、页数超过上限则等比采样在1..pageCount范围内均匀选取maxRequestAmount个页码并行请求再根据页码与每页 100 条换算各采样点的实际 Star 位置。最后通过getRepoStargazersCount获取当前实时 Star 总数作为时间序列的终点。这种抽样 实时计数的组合使图表在请求量受限的前提下仍能准确还原增长曲线的整体形态。数据获取过程中若遇到 404仓库不存在、403GitHub API 限流、401Token 无效、501无 Star 历史等错误前端 frontend/components/StarChartViewer.tsx 会分别弹出 Token 设置对话框或自动移除无效仓库。此外前端还支持用户配置个人 GitHub Token 来规避匿名限流Token 存储相关逻辑可参考 frontend/helpers/storage.tsx 与 frontend/components/TokenSettingDialog.tsx。仓库结构速览理解整个项目可以抓住这样一条主线前端frontend负责交互共享包shared负责跨端复用后端backend负责 SVG 生成gh 目录负责离线 Star 数据。其中frontend/Next.js 站点、博客、Chrome 扩展构建脚本backend/Hono API Server产出可嵌入的 SVG 图表与 OG 卡片shared/前后端共享的图表类型、API 封装与 xy-chart 渲染核心gh/GitHub Star 数据的离线抓取与生成工具链如 gh/star-fetch.ts、gh/star-count.tsassets/项目宣传图与 Logo 素材。小结Star History 是一个将GitHub Star 历史图这一单一需求做到极致的开源项目前端提供流畅的多仓库对比、时间线/日期双视图与手绘风格图表API Server 则把同一套渲染能力搬到了服务端以参数化 URL 输出轻量、可缓存的 SVG让任意 README 都能嵌入实时更新的 Star 趋势图。通过阅读本仓库源码你可以完整学到 Next.js 站点组织、GitHub API 分页采样、JSDOM 服务端 SVG 渲染、LRU 多级缓存以及 Chrome 扩展构建等一系列可复用的工程实践。赞分享开发工具数据可视化【免费下载链接】star-historyThe de facto GitHub star history graph.项目地址https://gitcode.com/gh_mirrors/st/star-history点击查看免费下载相关推荐为 GitHub README 接入实时 Star History 图表iframe 与 SVG 两种嵌入方案的完整实战为 GitHub README 接入实时 Star History 图表iframe 与 SVG 两种嵌入方案的完整实战 Star History 的实时星标开发工具数据可视化Codex-X Star History Worker基于 Cloudflare Worker 的仓库 Star 历史 SVG 图表服务实战指南Codex X Star History Worker基于 Cloudflare Worker 的仓库 Star 历史 SVG 图表服务实战指南 本文以仓库中桌面应用开发者工具AI 应用Rufus 快速指南5 分钟做好 USB 启动盘老机器绕过 TPM 也能装 Win11Rufus 快速指南5 分钟做好 USB 启动盘老机器绕过 TPM 也能装 Win11 给新电脑装系统、或想让老机器用上 Win11第一件要备好的是一张能桌面应用开发工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表