6 个版本
0.1.5 | 2024 年 4 月 30 日 |
---|---|
0.1.4 | 2024 年 3 月 29 日 |
#389 在 Cargo 插件 中
每月 29 次下载
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