社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

又一个顶级开源工具:一个文件,把GitHub仓库变成交互地图!

Java知音 • 1 月前 • 115 次点击  

 

上周在 GitHub Trending 上看到一个项目,CodeFlow,4 个月拿了 3.6k star。我点进去看完 README,只有一个感觉:这 TM 才叫开发者工具。

一个 HTML 文件,粘贴 GitHub 链接,30 秒生成交互式代码架构图。不装 CLI,不用注册,不碰你的代码,打开浏览器就能用。

这是个什么东西

CodeFlow 是 Braedon Saunders 做的开源项目,他把 React 18、D3.js 7、Babel 塞进了一个 index.html 里,从 CDN 加载依赖,零构建步骤。你粘贴任意 GitHub 仓库地址(或者拖一个本地文件夹),它分析完代码依赖关系,画出一张可拖拽、可缩放、可点击的交互式架构图。

每个文件是一个节点,每一条 import 是一条边。颜色代表架构层级、文件夹归属、或者 commit 热度。点一个节点,高亮它的所有上下游依赖。点"Blast Radius"模式,改一行代码前先看清楚,到底会炸多少文件。

技术栈简单到离谱,一个 index.html,CDN 拉 React 18 做 UI,D3.js 7 画力导向图,Babel 在浏览器里编译 JSX。没有 package.json,没有 node_modules,也没有 webpack。克隆下来双击 index.html 就能跑。

你可能会问:这玩意能分析什么语言?

JavaScript、TypeScript、Python、Java、Go、Ruby、PHP、Rust、C/C++、C#、Swift、Kotlin、Scala、Elixir、Haskell、Lua、R、Julia、Dart、Shell、Vue、Svelte……三十多种。函数提取靠正则匹配,依赖分析靠 import 语句。不是编译器级别的精确,但对于"我想快速看懂这个项目长什么样",够用了。

它还支持分析 Obsidian 笔记库的 wiki-link 和 Markdown 链接,把笔记变成知识图谱。这个功能我试了一下,挺新鲜的。

功能详情

CodeFlow 不是画个图就完事了,它的功能列表比我想象的长,我一个一个说。

1. 交互式依赖图:拖拽、缩放、点击高亮

这是 CodeFlow 的核心。粘贴链接后,它从 GitHub API 拉取仓库文件列表,逐个分析每个文件里的函数定义和 import,用 D3.js 渲染成力导向图。

节点代表文件,边代表依赖关系。你可以拖拽节点调整布局,滚轮缩放,点击节点高亮它的所有依赖链。有四种着色模式随时切换:按文件夹着色、按架构层级着色(把 UI 层、Service 层、Utils 层分开上色)、按 commit 频率着色(热力图模式)、以及 Blast 模式(选中文件时,用颜色标记影响范围)。

说真的,用这个看一个新仓库比在 IDE 里一个个文件点开快多了。

2. 爆炸半径分析:改这个文件,会炸多少东西

这个功能是我最喜欢的。选中一个文件,CodeFlow 把直接依赖它的文件标记出来,再把这些文件的依赖也标记出来,一路递归下去。图上的颜色从深到浅,显示影响层级。

以前我们改一个底层工具函数,只能靠 grep 手动查引用。CodeFlow 把这个过程可视化成了几秒钟的事。他们的 demo 里演示了这个功能,作者说"你点一个文件,图就洪水般扩散开来,直接 import 它的先亮,间接依赖的接着亮,测试文件单独标色"。有时候你自己觉得改的是个独立模块,结果图告诉你它横跨八个模块十四个测试文件。

3. 安全扫描:硬编码密钥、SQL注入、eval检测

CodeFlow 内置了一个安全扫描器,自动检测四种问题:硬编码的 API key 和 secret、SQL 注入风险、危险的  eval() 调用、生产环境里残留的 debug 语句。

它怎么检测的?也是靠正则和模式匹配。虽然比不上专门的 SAST 工具,但在你看代码结构的同时顺手扫一遍安全问题,这个思路不错。至少能拦住最蠢的那种把 AWS Access Key 写死在代码里还推到公开仓库的行为。

4. 模式检测:单例、工厂、观察者、React Hooks

CodeFlow 能自动识别代码里的设计模式。单例模式、工厂模式、观察者/事件模式、React 自定义 Hook,这些都能扫出来。

反过来它也能检测反模式:上帝对象(一个文件干了太多事)、高耦合模块。这些信息在你做重构决策的时候,比单纯看文件数量有用得多。

5. 健康评分:A到F,一目了然

CodeFlow 给整个代码库打一个字母等级,从 A 到 F。评分依据四个维度:死代码占比、循环依赖数量、模块耦合度、安全问题数量。

这个评分不是虚的,它直接关联到具体的文件和具体的指标。你看到项目得了 C,可以点进去看是哪个维度拖了后腿,是耦合太高还是死代码太多。

上图是 CodeFlow 的 detailed 风格 Card,展示了健康评分、语言构成、文件统计、Top 文件夹、脆弱性和隐藏成本等详细信息。

6. 活动热力图:哪些文件改得最勤

按 commit 频率给文件着色。热力图上最红的文件就是最近改动最频繁的,深蓝的是半年没动过的。

这个功能单独看好像没什么,但结合依赖图用就厉害了。一个频繁改动的核心文件,CodeFlow 标记为高耦合,你就知道这项目架构大概率有问题。一个六个月没动过的文件在热力图上发蓝,结果 blast radius 分析显示改了它会炸掉二十个文件,这说明这堆依赖关系是历史遗留的,该清理了。

7. PR 影响分析:审查代码不用猜

粘贴一个 PR 的 URL,CodeFlow 告诉你这个 PR 改了哪些文件,每个文件的 blast radius 有多大。审查代码的时候看一眼这个图,不用手动追踪改动的连锁反应。

这个功能对开源项目 maintainer 特别实用。收到一个 PR,先丢进 CodeFlow 看看影响面,再决定要不要仔细读代码。

8. 代码归属权:知道该找谁问

基于 git 历史分析每个文件的 Top 贡献者。你看到一段看不懂的代码,CodeFlow 直接告诉你这段代码主要是谁写的,找人问的时候能找到对象。

代码审查也用得上:一个文件的主要作者提了个改同一个文件的 PR,他的改动大概率是靠谱的。反过来一个从没碰过这个模块的人提了个大改,多看一眼。

9. CodeFlow Card:README 上的自动更新 SVG 徽章

这是一个 GitHub Action,每次 merge 代码后自动重新计算项目的健康评分、规模、脆弱性、隐藏成本,生成一张 SVG 卡片贴在 README 上。

五种风格可选:compact(紧凑型)、row(状态条型)、minimal(单行文本)、hero(渐变背景)、detailed(信息密集型)。颜色主题也能换,purple、teal、cyan、green、pink、blue、amber、red,还能传自定义 CSS 颜色。

卡片自动适配 GitHub 的亮色/暗色主题。PR 合并后还能在评论区贴一张"收据",列出本次 PR 对健康评分的影响。

上图是 compact 风格的 CodeFlow Card。

上图是 hero 风格的 Card,渐变背景,视觉效果更突出。

10. 本地文件分析:代码不出你的电脑

除了粘贴 GitHub 链接,CodeFlow 还能直接分析本地文件夹。点"Open Folder"按钮,选一个文件夹,所有分析都在浏览器里跑。代码不离开你的电脑,断网也能用。

支持拖拽文件或文件夹,支持递归扫描,还支持自定义排除规则(比如跳过 node_modules、uploads、缓存目录)。这个功能对于分析公司内部项目或者还没推到 GitHub 的私人仓库,简直是刚需。

11. Markdown 和 Wiki-Link 图谱:Obsidian 用户的意外惊喜

把 CodeFlow 指向一个 Obsidian 笔记库或者任意 Markdown 文件夹,它把 wiki-link 和 相对路径链接 识别为图的边,每个笔记是一个特殊颜色的节点。导出的 JSON 里每个笔记有独立的 dependencies 数组。

这个功能跟代码分析无关,但挺有意思,等于白送了一个轻量级的知识图谱工具。

12. 导出和分享:JSON、Markdown、SVG、PDF 随便选

分析完了能导出多种格式:JSON 报告(完整分析数据,适合丢进 CI/CD)、Markdown 报告、纯文本、SVG 矢量图、PDF 文档。还能生成一个分享链接,别人点开能直接看同一份分析结果。

快速上手

CodeFlow 的"安装"可以说没有安装。

方式一:直接用在线版

打开 https://codeflow-five.vercel.app ,粘贴 GitHub 仓库地址(比如 braedonsaunders/codeflow,回车,等它分析完。

公开仓库不需要任何 token,私有仓库的话,去 GitHub Settings 创建一个 Personal Access Token(勾上 repo 权限),粘贴到 CodeFlow 的 Token 输入框就行。这个 token 只存在浏览器内存里,关掉标签页就没了。

方式二:本地跑

git clone https://github.com/braedonsaunders/codeflow.git
open index.html

就这么两行,打开浏览器,跟在线版一模一样,区别是你可以断网用,而且源码全在眼前,想改就改。

方式三:分析本地文件

打开 CodeFlow,点"Open Folder",选个文件夹,或者直接把文件拖进去。分析全在浏览器里跑,不上传任何东西。

GitHub API 有频率限制,不带 token 一小时 60 次请求,带了 token 一小时 5000 次,分析大仓库建议绑定 token。

说点实在的

CodeFlow 不是完美的。依赖分析靠正则和函数名匹配,遇到动态 import、运行时的反射调用、重命名引用,它就抓不准了。README 自己写了:"it's designed for a quick overview, not 100% accuracy."

但这个定位我认,它不是要替代 SonarQube 或者 Sourcegraph,它就是为了让我们在第一次打开一个陌生仓库的时候,不用在几千个文件里抓瞎。

一个 HTML 文件,四个月3.6k star,零依赖安装,零数据收集,MIT 协议。Braedon Saunders 把"简单"这个词执行到了极致。

我敬这种产品观。

项目地址:

https://github.com/braedonsaunders/codeflow

 

点击下方卡片,关注Java知音

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/198116