archora-dev/archora

GitHub: archora-dev/archora

一款本地优先的前端架构分析器,通过依赖图分析、循环检测、分层违规检查和契约约束帮助团队在 CI 和桌面环境中预防架构退化。

Stars: 0 | Forks: 0

# Archora 一个本地分析器,可读取前端代码库,并告诉你架构哪里正在腐化 —— 包括循环依赖、热点区域、分层违规、契约破坏、包体积膨胀以及变更耦合模块。可作为桌面应用、CLI 或在 CI 中运行。代码不会离开你的机器。 文档:**[docs.archora.dev](https://docs.archora.dev)** ## 团队为何使用它 - 在 PR 中发现架构退化,避免其演变为大规模重构。 - 使用 `architectureBudget` 维护基准,而不是争论个人偏好。 - 将循环依赖、分层违规和热点区域转化为带有证据的修复队列。 - 为不熟悉 CLI 的队友提供一个桌面工作区,用于查看 Impact、Rules、Cycles 和报告。 - 保持本地优先:扫描和报告在你的机器或 CI 内运行。 ## 具体功能 给定一个 Vue / TS / JS 项目的路径,Archora 会: 1. 解析每个源文件(使用 TypeScript compiler API 解析 `.ts`/`.tsx`,使用 `@vue/compiler-sfc` 解析 `.vue`),跨 `tsconfig` 别名链解析导入,构建依赖图。 2. 运行 Tarjan 的 SCC 算法查找循环依赖;将直接循环(长度 ≤ 2)与间接循环区分开来。 3. 计算每个模块的 fan-in、fan-out、不稳定性、深度、耦合度和热度。 4. 将模块映射到 FSD 风格的分层(`shared → entities → features → widgets → pages → app`)上,并标记每一个指向错误方向的边。 5. 检查 `.archora.json` 中用户声明的契约:边界规则、包预算、API 稳定性和 bundle 阈值。 6. 如果你传入 `git log`,它会计算每个模块的变动,并查找时间耦合对 —— 即那些总是同时更改,但在它们之间没有静态边的文件。这通常意味着缺失了抽象。 7. 如果你传入 webpack/rollup 统计信息,它会查找 bundle 膨胀 —— 跨 chunk 重复的模块、重型 chunk、以及在 chunk 中占据主导地位的单个模块。 8. 以 JSON、Markdown 或独立的 HTML 文件输出结果报告,你可以将其发送给审查者。 在 10 个项目的参考语料库中,关于循环依赖、热点区域和分层违规的精确率/召回率保持在 F1 = 1.0。实时评分表见 [BENCHMARKS.md](./BENCHMARKS.md)。 ## 功能对比 | | Archora | madge | dependency-cruiser | knip | | ----------------------------------------------------------- | ------- | ----- | ------------------ | ------- | | 依赖图 | ✓ | ✓ | ✓ | 部分 | | 循环检测 (SCC) | ✓ | ✓ | ✓ | – | | 分层规则 | ✓ | – | ✓ (配置繁琐) | – | | 架构契约 (边界 / 预算 / API 冻结) | ✓ | – | 部分 | – | | Bundle 膨胀 (webpack / rollup 统计信息) | ✓ | – | – | – | | Server/client (RSC) 边界泄漏 | ✓ | – | – | – | | 时间耦合 (git 变动相关性) | ✓ | – | – | – | | 桌面 UI / 浏览器 | ✓ | – | – | – | | 独立的 HTML 报告 | ✓ | – | 部分 | – | | 本地优先,无遥测 | ✓ | ✓ | ✓ | ✓ | 与 `madge` 和 `dependency-cruiser` 的重叠之处在于依赖图和循环检测。而差异点则在于此后的所有功能 —— 分层/契约执行、bundle 和 git 信号融合到同一个报告中,以及一个你可以直接交给非 CLI 队友使用的桌面 UI。 ## 安装方式 npm 发布后: ``` npx @archora/cli init . --dry-run npx @archora/cli init . npx @archora/cli baseline write . -o .archora/baseline.json npx @archora/cli check . npx @archora/cli report . --format html -o archora-report.html ``` 推荐的 GitHub Actions 方式: ``` - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 22 - run: npx -y @archora/cli@1.0.3 check . --fail-on grade:F ``` 当前仓库的 checkout 方式: ``` git clone https://github.com/archora-dev/archora.git cd archora npm install npm run dev # web dev server (Vite) npm run tauri:dev # desktop dev (Tauri 2) npm run cli -- init ./your-project --dry-run npm run cli -- analyze ./your-project -o scan.json npm run cli -- report ./your-project --format html -o report.html ``` 从仪表板打开一个项目目录。Web 构建版本使用 File System Access API(Chromium 浏览器)。桌面构建版本使用 Tauri 的目录选择器。 ## CLI ``` archora init . --dry-run # inspect conservative config archora init . # write .archora.json archora baseline write . -o .archora/baseline.json # intentional mainline baseline archora check . # architecture budget / fail-on gate archora review . --base .archora/baseline.json --pr-comment archora report . --format html -o archora.html archora report . --format fix-plan -o fix-plan.json ``` 当违反阈值时,`check` 会以非零状态退出,因此它可以作为回归门禁直接插入到任何 CI 中。 ## 演示脚本 演练脚本位于: - [`apps/docs/guide/demo-script.md`](./apps/docs/guide/demo-script.md) 预期的流程是 Review → Impact → Cycles/Rules → Report。该产品不再使用全项目图作为主 UI。 ## 架构 采用 Feature-Sliced Design,并有一个硬性规则:`packages/core` 没有任何 Vue / Pinia / Tauri / 框架的导入,它可以在 Node 和 Web Worker 中不加修改地运行。UI 层遵循 `app → pages → widgets → features → entities → shared`。这两项规则均由 ESLint 强制执行,而不仅仅是约定。 ``` packages/ core/ analyzer pipeline, dependency model, diff, metrics, report builders, contract engine cli/ @archora/cli — thin wrapper around core src/ app/ providers, router, layouts, global stores pages/ route containers widgets/ architecture workspace, scan progress, search overlay, … features/ open-project, scan-project, export-report, apply-fix, layer-rules entities/ project / scan / history / export-history / settings Pinia stores shared/ UI primitives, hotkeys, i18n, Tauri runtime src-tauri/ Rust shell, IPC commands, file watcher apps/docs/ VitePress site (docs.archora.dev) ``` 分析器 pipeline: ``` discoverFiles → parseFiles → resolveImports → buildGraph → detectCycles → computeMetrics → rankHotZones → ScanResult ``` `FileSource` 是唯一的 IO 边界。目前已有针对 Node FS、浏览器 File System Access API、内存(测试、Web Worker payload)和 Tauri 的实现。 ## 许可证 **专有、源码可见、仅供付费使用。** 法律文本请参阅 [`LICENSE`](./LICENSE),许可条款请参阅 [`COMMERCIAL-LICENSE.md`](./COMMERCIAL-LICENSE.md)。 **在没有付费商业许可证的情况下,你只能:** - 在 GitHub 上阅读源码。 - 克隆副本用于个人的短期评估(≤ 30 天),以决定是否购买许可证。 - 在合理使用 (fair use) 原则下引用或摘录简短片段。 **对于其他任何用途,你都需要付费商业许可证**,包括: - 在短期评估之外,针对任何代码库(你自己的或他人的)运行 Archora。 - 在 CI 中、工作工作站上或任何个人/爱好项目中使用它。 - 打包、重新分发、修改、托管 Archora 或将其作为服务提供。 - 将其源码或输出用于模型训练。 商业许可: | 层级 | 价格 | | ------- | ---------------------- | | Solo | $19/月 或 $190/年 | | Team | $49/席位/月 | | Company | 定制 | 联系方式:**[akotov@archora.dev](mailto:akotov@archora.dev)** · Telegram **@akotofff** 在接入结账与授权分发系统之前,试用密钥暂时使用手动的签名密钥流程: ``` npx @archora/cli@1.0.3 license request --plan trial --out license-request.md npx @archora/cli@1.0.3 license activate npx @archora/cli@1.0.3 license status ``` ## 状态 Archora CLI `1.0.3` 已为发布到 npm 做好准备。分析器核心、CLI、桌面包装器、报告、历史记录、契约引擎以及 bundle/RSC/时间耦合信号均已就绪。Architecture Explorer 现在以分析器为核心;旧版的产品图 UI 已被移除。剩余的外部发布工作包括:发布已签名的桌面制品、接入结账/授权分发系统以及录制公开演示视频。 ## 验证 ``` npm run lint npm run typecheck npm run test npm run build npm run bench # accuracy: precision/recall on reference corpus npm run bench -- --threshold-precision=0.9 # use as a hard gate ``` CI 会在每次 push 和 PR 时运行 `web`(lint + 类型检查 + 测试 + 覆盖率 + 构建 + `npm audit` + 性能门禁)和 `tauri`(cargo + bundle 冒烟测试)任务。 ## 链接 - 文档:[docs.archora.dev](https://docs.archora.dev) - Bug 报告、功能请求、授权:**akotov@archora.dev** · Telegram **@akotofff** - 基准测试:[BENCHMARKS.md](./BENCHMARKS.md) - 隐私:[PRIVACY.md](./PRIVACY.md) — 工具会接触哪些数据以及哪些数据会保留在磁盘上 - 安全政策:[SECURITY.md](./SECURITY.md)
标签:TypeScript, 依赖图, 前端架构, 可视化界面, 安全插件, 开源框架, 技术债, 持续集成, 自动化攻击, 错误基检测, 静态代码分析