#cargo-workspace #cargo-toml #workspace #cargo #cargo-subcommand #inheritance #dependencies

bin+lib cargo-autoinherit

一个尽可能利用依赖继承的 Cargo 子命令

6 个版本

0.1.5 2024 年 4 月 30 日
0.1.4 2024 年 3 月 29 日

#389Cargo 插件

每月 29 次下载

Apache-2.0 OR MIT

29KB
587

cargo-autoinherit

一个 Cargo 子命令,用于自动消除 workspace 中 Cargo.toml 清单的 DRY 问题。

[!注意] 本项目由 Mainmatter 创建。
如果您正在寻找 Rust 咨询或培训,请查看我们的 着陆页

问题

当你在 Cargo 工作区中有多个包时,你经常会同时在多个 Cargo.toml 文件中依赖于相同的包。
这种重复可能会成为一个问题

  • 当你想更新一个依赖项时,你必须更新多个位置。
  • 当你需要添加一个新的依赖项时,你必须首先检查它是否已经在你的工作区中的另一个包中使用,以保持版本同步。

这个过程容易出错且繁琐。
如果你搞错了,你会在工作区中结束于同一依赖的不同版本。这可能导致难以调试的编译错误,或者用不必要的同一包的副本膨胀你的工件。

解决方案

cargo-autoinherit 是一个 Cargo 子命令,它帮助你保持依赖项的 DRY。

它利用了 Cargo 的新特性:依赖继承,你可以在工作区的根 Cargo.toml 中指定依赖项,工作区中的所有成员都将继承这些依赖项(dependency_name = { workspace = true})。

将现有的工作空间转换为使用依赖继承可能是一个繁琐的过程——一个非平凡的工程可能有数十个依赖项,你必须手动将它们从每个成员的 Cargo.toml 移动到根目录下的 Cargo.toml

cargo-autoinherit 会自动完成这个过程。

# From the root of your workspace
cargo autoinherit

它会收集你工作空间中的所有依赖项,确定哪些可以重复使用,并将它们移动到根目录下 Cargo.toml[workspace.dependencies] 部分。它还会负责更新成员的 Cargo.toml 文件,为每个包设置正确的 features 字段。

安装

你可以在 发行页面 找到预构建的二进制文件。
或者,你可以从源码构建

cargo install --locked cargo-autoinherit

用法

# From the root of your workspace
cargo autoinherit

限制

  • cargo-autoinherit 不会自动继承路径依赖项。
  • cargo-autoinherit 不会自动从私有仓库继承依赖项。
  • cargo-autoinherit 只会合并显然兼容的版本要求(例如,^1.0.0^1.1.5 将合并为 ^1.1.5,但 ^1.0.0>=1,<2 则不会合并)。

依赖

~8MB
~143K SLoC