agmd 1.0 重磅升级——Rust 重写,性能起飞

agmd 1.0 重磅升级------Rust 重写,性能起飞

距离发布第一个版本是四年前了,上个版本agmd v0.4.0 node版本也已经过去半年了, 这段时间我也没闲着,憋了个大招出来,希望能帮到有项目重构和文档生成需求的朋友们~_~

前言

本期所要讲的不是新插件,而是对原 agmd 的彻底重构 ------从 Node.js 全面迁移到 Rust ,版本号直接从 0.4 跃升至 1.0.1!

这次升级主要有:

🚀 Rust 重写 ------ 零 Node.js 依赖,单二进制文件直接运行

⚡ 性能大幅提升 ------ 大工程扫描速度明显加快,内存占用更低

📦 双形态分发 ------ 既是 CLI 工具,也是 Rust 库,还能通过 npm 安装

🖥️ 多平台预编译 ------ Windows、Linux x64、Linux ARM64 开箱即用

✅ 测试用例翻倍 ------ 从 26 个增加到 36+ 个,新增端到端集成测试

🎯 所有原有功能保留 ------ 界面菜单、路径转换、路由分析、工程拆分、kebab-case 命名统一,一个都不少

另外本次重构依然保留了全程界面命令选择操作,对非 Rust 开发者友好,装完 npm 包直接就能用。


制作动机

年前我做第一版 agmd 的时候,用的是 Node.js + commander,功能虽然齐了,但随着工程体量变大,问题越来越明显:

速度:扫描一个大型前端 monorepo,Node.js 遍历文件系统 + 正则解析,慢的时候能喝口水。

今年不是又换了工作嘛(对,又换了🤣),新公司项目代码量直接上一个量级,老插件跑起来有点吃力了。再加上我一直想深入学习 Rust,索性一不做二不休------用 Rust 把整套逻辑重写一遍。

说干就干,从第一行 Rust 代码到稳定发版,中间经历了无数次 "这 borrow checker 又报错了" 的夜晚,commit 数也从原来的 265 次累积到了现在。但结果是值得的:现在扫描同样规模的工程,速度快了不止一倍,而且编译成一个单文件,扔到哪儿都能跑。


功能介绍

🚀 Rust 重写,零依赖单二进制

以前装 agmd 需要 Node.js 环境。现在如果你用 npm 安装,postinstall 脚本会自动下载对应平台的预编译二进制(Windows .exe、Linux x64、Linux ARM64);如果你本身就是 Rust 开发者,也可以直接 cargo install。

核心运行时从 Node.js 换成了 Rust + Tokio,文件遍历、正则解析、路径计算全部原生执行,大工程感受特别明显。

📦 同时提供 Rust 库 API

这次不只是 CLI 工具,src/lib.rs 还暴露了两个异步 API:

  • get_file_nodes_api ------ 扫描目录返回 FileNode 树
  • get_md_api ------ 直接生成 Markdown 文档

如果你想在自己的 Rust 项目里集成目录扫描和文档生成能力,直接调用就行。

⚡ 原有功能全部保留,体验更稳

以下功能在 Rust 版中全部原汁原味保留,而且因为 Rust 的类型系统和错误处理,出 bug 的概率更低了:

⛵ 绝对路径 ↔ 相对路径互转

@/unuse/components/user-rulerts 一键转成 ../../unuse/components/user-rulerts.vue,反之亦然。方便在 "书写时用别名、提交前/查看时转相对路径" 的 workflow 中使用。

♨️ 批量补全后缀

自动给 import 补上 .vue、.js、.ts 后缀,甚至能补全 index.vue / index.js。VS Code 里点进去就能跳转,不用猜后缀。

👏 按路由标记分类 + 自动拆分工程

微服务/qiankun 项目越堆越大,需要拆工程的时候,插件内置对 router 目录的自动分析,帮你把 "只有工程 A 用到"、"只有工程 B 用到"、"两边都用" 的文件标记出来,拆分的时候心里有底。

☝️ 一键文件名规范化(kebab-case / CamelCase)

工程命名五花八门?一键把驼峰改成短横线连接(或反向),搞完后整个工程看上去都舒服了。Windows 下大小写不敏感文件系统也做了特殊处理,不会翻车。

✅ 测试用例从 26 个增加到 36+ 个

重构不是简单翻译代码,而是重新梳理了边界情况。现在的测试覆盖了:

  • 文件系统扫描与解析
  • import 路径替换(同级、兄弟、深层、@ 别名互转、仅补全后缀)
  • 路由正则解析
  • Markdown 统计与格式化
  • 新增:端到端集成测试(临时目录构造真实工程,完整跑一遍扫描→替换→输出)
  • 新增:重命名路径的嵌套目录和 Windows 大小写处理测试

如果你打算二开扩展功能,这些测试用例依然是最好的安全网。

🖥️ 交叉编译 + npm 多平台分发

项目配置了 aarch64-unknown-linux-gnu、x86_64-pc-windows-gnu、x86_64-unknown-linux-gnu 等交叉编译目标。发布时把预编译二进制丢进 bin/ 目录,npm 包会自动根据当前平台选择正确的可执行文件。

Rust 开发者也可以直接用 cargo build --release 打出自己平台的版本。


写在最后

这个插件从 Node.js 0.2 版走到今天 Rust 1.0 版,中间 commit 数已经过了 300+,都是自己来来回回修改、一点点敲出来的。Rust 的重写尤其磨人,borrow checker 和生命周期让我掉了不少头发,但看到大工程扫描时那丝滑的输出,一切都值了。

我也希望把这些成果公布出来,有需要学习源码的,可以进到我的 git 地址 去克隆查看。开源不易,如果对你有帮助,还请不吝啬一个小小的 star,你的支持是我开源的动力!


往期原创文章链接

相关推荐
Dream-Y.ocean9 小时前
鸿蒙PC平台宅匠 3D 室内设计适配实战:基于 Electron 壳方案的 Three.js 双渲染引擎与参数化户型编辑器开发
javascript·3d·harmonyos
Highcharts.js10 小时前
Highcharts Gantt使用符号的自定义数据标签开发甘特图示例
javascript·甘特图·highcharts·图表开发·实战代码·响应式图表
kyriewen13 小时前
Skills 榜前 10 我全装了:只有 3 个能直接用
前端·javascript·程序员
工控丫丫14 小时前
帆软看板中经常使用的公式函数及经常搭的组合
前端·javascript·数据库
Dream-Y.ocean16 小时前
鸿蒙PC平台星图遥感适配实战:基于 Electron 壳方案的纯 JavaScript 遥感图像处理引擎开发
javascript·electron·harmonyos
螺丝钉tina17 小时前
[Playwright ][16]Playwright + TypeScript API 自动化测试实战:API测试
前端·javascript·typescript
Highcharts.js19 小时前
React 中原生支持使用 JSX 组件配置自定义表格 Highcharts Grid
前端·javascript·react.js·前端框架·jsx·highcharts·自定义表格
Java后端的Ai之路19 小时前
【AIAgent开发】-Agent工具封装成CLI(纯干货!!!)
java·javascript·人工智能·agent·cli
薛定谔的猫-菜鸟程序员20 小时前
Electron开发超详细教程(从入门到放弃)
前端·javascript·electron