移除未使用的 Rust 依赖
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/remove-unused-rust-dependencies-before-they-quietly-bloat-builds-and-reviews-with-cargo-machete。
技能介绍
先说清楚要解决的问题
Rust 项目的 Cargo.toml 很少是一次写定的。功能迭代、方向调整、原型实验之后,清单里经常会留下一批已经没有任何代码引用的依赖。它们看起来无害,实际代价却是连续的:
- 构建时间:每个未使用的 crate 都要被下载、编译、链接,哪怕只是被间接引入。
- 审查噪音:依赖变更让 diff 变大,评审者需要花时间确认某次升级是否安全、是否有真实用途。
- 清单漂移:
Cargo.lock与真实依赖图逐渐脱节,后来的维护者很难判断哪些依赖是有意保留的。
这类依赖通常不会主动报错,编译器不会提醒你,cargo build 也不会慢到让人意识到问题。它们只是安静地留在清单里,持续消耗构建与评审的注意力。
这个技能如何工作
该技能基于 cargo-machete,围绕「扫描—判定—清理」三步展开:
- 扫描:在包含 Rust 项目的目录中运行扫描,
cargo-machete会遍历清单里的每一项依赖,并在源码中查找对应的引用痕迹。 - 判定:使用与否不是靠包名字符串是否出现来定,而是结合 Rust 的实际导入方式(如
use语句、extern crate)判断依赖是否真的被引用。 - 清理:扫描结果会列出未被引用的依赖,随后可将这些条目从
Cargo.toml中移除,让清单回归到与代码一致的状态。
对需要管理多个项目的场景,它支持指向包含一个或多个 Cargo 项目的目录统一扫描,不必逐个项目手动排查。
适用边界与注意点
- 运行前提是本机具备 Rust 工具链、目标是 Cargo 项目,并且有 shell 可用,以执行依赖扫描与清理编辑。
- 它只解决「未使用」这一类问题,不会主动升级或替换依赖版本;依赖确实在用但版本老旧的情况不在其职责范围内。
- 扫描结果建议与人工确认配合:某些依赖可能通过构建脚本、特性开关或动态加载被间接使用,移除前要结合项目实际情况判断。
- 上游提供了 Docker 镜像,适合在隔离环境或 CI 流水线中运行扫描,避免污染本地工具链。
- 技能说明提取自上游仓库与
cargo-machete的 README,具体的判定细节以官方文档为准。
使用场景
- 维护 Rust 项目时,发现构建时间变长,需要排查并移除 Cargo.toml 中未使用的依赖。
- 提交代码前,想减少 PR 中依赖变更带来的审查噪音,确认清单与源码引用一致。
- 管理多个 Rust 项目目录时,批量扫描各项目,清理长期未被引用的依赖。
- 在 CI 或隔离环境中,通过 Docker 镜像运行 cargo-machete,避免污染本地工具链。
适合人员
- Rust 后端工程师,希望缩短 CI 下载与编译耗时,降低未使用依赖的构建成本。
- Rust 库维护者,需要定期核对 Cargo.toml 与源码引用,避免清单漂移影响后续升级。
- 负责 Rust 服务审查的技术负责人,想减少依赖变更带来的评审噪音与确认负担。
- 在 CI 流水线中做依赖管理的 DevOps 工程师,打算用 Docker 镜像执行依赖扫描。