xCaptaiN09/blueprint
GitHub: xCaptaiN09/blueprint
blueprint 是一个零配置的本地多语言代码依赖图生成工具,通过扫描 import 关系将整个代码库渲染为可交互的独立 HTML 文件。
Stars: 0 | Forks: 0
# blueprint。

_kaeru — 150 个文件 · 50 个内部链接 · c / python / cpp。一条命令输入,一张图纸输出:平移、缩放、拆解。_
将其指向任何代码库,blueprint 会读取所有的 import,追踪哪个文件依赖于哪个文件,并将整个项目绘制成一张可交互的图纸。小型项目会呈现为平静的力导向布局;大型项目则会折叠成模块 treemap,使得整体结构保持清晰,而不会纠缠成一团乱麻。输出结果是一个独立的 `.html` 文件 —— 无需服务器,无需构建步骤,不会回传数据。
## 静止状态。

_hermes — 48 个文件 · python + javascript。共享的“胶水”模块(`_common.py`、`_hermes_home.py`)将其依赖项拉拢成安静的中心节点;其余的则像孤点一样游离。这是一个脚本集合仓库最真实的形态,没有任何布局上的花招来伪装。_
## 看它如何解答。

_点击 `lkc.h`,图纸就会给出答案 —— 它包含的两个 header,包含它的十三个文件,每一个都列在右侧的 spec 面板中。在你触碰它之前,它是纯单色的;随后只有一种强调色,精准落在你正在关注的地方。_
## 安装。
从源码安装 —— 今天就能用,不需要发布步骤:
```
git clone https://github.com/xCaptaiN09/blueprint.git
cd blueprint
npm install
npm run build
npm link # puts the `blueprint` command on your path
```
然后,在任何地方运行:
```
cd path/to/your/project
blueprint # writes ./blueprint.html
blueprint --open # writes it and opens your browser
```
一旦它登陆 npm,整个过程就可以简化为 `npm i -g blueprint-cli`。
## 三种运行方式。
**generate** 会扫描一次代码库并生成一个独立的 `blueprint.html` —— 这就是你可以提交、通过邮件发送,或者在飞机上打开的工件。`-o ` 可以重命名它,`--json` 还会导出原始的依赖图,`--exclude ` 可以跳过特定路径,`--open` 会自动启动浏览器。
**watch** 会先生成图纸,然后在 `http://localhost:4321` 提供服务并保持实时更新:在你的编辑器中保存文件,打开的标签页稍后片刻就会自动重新加载,这样你就可以把它放在工作区旁边,一边写代码一边看着依赖图随之变化。你需要时可以使用 `-p ` 和 `--no-open`。
**serve** 是 `watch` 的别名,适用于那些在你的脑海中“serve”听起来更顺耳的日子。
## 图纸的功能。
- **悬停**在某个节点上,其连接会亮起橙色,而其他所有内容都会淡出为微弱的背景 —— 动画方向虚线会显示依赖关系的实际流向。
- **点击**节点打开 spec 面板:语言、完整路径、入/出度、它依赖于什么、什么依赖于它,以及一个指示其是否处于循环依赖中的标志。
- 使用 `/` **搜索**以按文件名高亮显示文件;按下回车会自动聚焦到第一个匹配项。
- 使用右上角的标签按语言进行**筛选**;`fit` 会重新调整视图以适应剩下的节点,`layout` 会重新触发物理模拟。
- 在大型仓库中,**缩放**是语义化的 —— 缩小视图时你看到的是带有标签的模块块,中等缩放时网格点会显现出来,放大后文件名会渐渐浮现。
- **空闲时绝对安静。**渲染循环在没有任何移动的瞬间就会停止,因此大型依赖图不会无缘无故地让你的风扇狂转。
## 支持的语言。
目前已支持解析 —— 提取 import,并在静态分析能够切实做到的情况下,将其解析到本地文件:
| 语言 | 扩展名 |
| ---------- | --------------------------------- |
| javascript | `.js` `.jsx` `.mjs` `.cjs` |
| typescript | `.ts` `.tsx` `.mts` `.cts` |
| python | `.py` |
| c | `.c` `.h` |
| c++ | `.cpp` `.cc` `.cxx` `.hpp` `.hxx` |
| go | `.go` |
| rust | `.rs` |
| java | `.java` |
| kotlin | `.kt` `.kts` |
## 运作原理。
一个具备 gitignore 感知能力的扫描器会遍历项目树,并按扩展名对文件进行分组;一个小巧的、针对不同语言的解析器会提取 import 语句并解析本地路径;结果会生成一个携带入/出度以及通过 Tarjan 算法检测出的循环依赖的有向图;该图随后被注入到一个独立的 html 模板中,在 canvas 上绘制出所有内容。其布局是自适应的 —— 对中小型项目使用 Barnes–Hut 力导向模拟,超过特定阈值则使用平铺式目录 treemap —— 并且绘制路径基于 dirty-flag 循环实现了细节分级,正是这一点使得它能够从 40 个文件的脚本扩展到 70,000 个文件的内核,而不会导致浏览器标签页崩溃。
## 图纸 01。
| | |
| ---------------- | -------------------------------------------------- |
| 版本 | 0.1.0 |
| 运行环境 | node ≥ 18 |
| 解析的语言 | js · ts · py · c · c++ · go · rust · java · kotlin |
| 输出 | 一个独立的 `.html` |
| 网络 | 无 —— 完全在你的机器上渲染 |
| 许可证 | MIT |
## 贡献。
blueprint 有意设计得小巧且易于修改:一个 typescript cli,少量针对不同语言的解析器,一个 html 模板,没有任何繁杂的框架需要你去对抗。添加一门语言是一个很好的入门 issue(first issue)—— 架构图和四步指南都在 [`CONTRIBUTING.md`](CONTRIBUTING.md) 中。
## 许可证。
MIT — © 2026 Muhammed Dilshad A (xCaptaiN09)。
ruby · php · swift · c#?
它们会被识别为文件,但尚未被解析 —— 它们会作为节点显示在面板中并带有其 import 列表,但不会绘制出边(edges),因为它们的 import 指定的是包和类而不是文件,我们宁愿如实呈现这一点,也不愿凭空捏造连接。支持它们只需补充一个小巧、独立的解析器;请参阅 `CONTRIBUTING.md`。调整两个阈值
`LAYOUT_THRESHOLD`(默认 1500 个文件)用于在力导向布局和模块 treemap 之间进行切换;`EDGE_REST_CAP`(默认 1200 条边)用于决定在静止状态下是显示完整的边网,还是仅在悬停/搜索时显示。这两个参数都位于 `templates/graph.html` 的顶部 —— 直接修改它们并重新生成即可,无需重新构建。标签:C/C++, CMS安全, JavaScript, MITM代理, Python, SOC Prime, 事务性I/O, 云安全监控, 代码可视化, 依赖关系分析, 后端开发, 多模态安全, 开发工具, 数据可视化, 无后门, 静态分析