递归检查不需要的通配符依赖项

6

我有一个库,想确保我的依赖树中没有使用通配符依赖项。 通配符依赖项很糟糕 :(

我能在命令行中用递归检查吗?还是我可以在中手动检查?

编辑:自从Rust 1.6发布以来(大约为),拒绝使用通配符依赖项的板条箱,感谢Steve Klabnik),但上仍然有旧的crate,其do 具有通配符依赖关系。 我可以上传一个依赖于这样一个旧箱子的我的箱子。 因此,我的crate间接地也依赖于通配符依赖项。 这就是我想要避免并检查的内容。

2个回答

3

几个月前,Cargo不再支持通配符依赖项。所以您无需自己执行此操作。

这是一个crates.io的功能,而不是Rust或Cargo的功能,因此它与这些工具的任何特定版本都没有关联。更新发生在我们发布Rust 1.6左右的时间


你是否有 Cargo/Rust 发布的(稳定)版本,该版本首次激活了这个功能?这将允许使用旧版本的用户知道它们的版本中是否已经“修复”了该问题。 - Matthieu M.
这正是我的问题:我的库有一个旧依赖项,它仍然使用通配符依赖项。我仍然可以将我的创建物发布到crates.io,因为它并没有直接使用通配符依赖项,而是通过另一个创建物间接使用。所以在一个庞大的依赖关系树中,我想检查是否还有任何东西在使用通配符依赖项。 - Lukas Kalbertodt

3
我编写了一个小脚本,它获取crates.io-index并读取所有包的当前信息。如果一个包直接使用通配符依赖于另一个包,则会以crate-name -> wildcard-dependency, another-one的格式打印一行。
目前有995个存在通配符依赖的软件包。该列表是详尽的,只要这些软件包得到更新,其长度就会减少。
你可以手动检查你的Cargo.lock中的所有依赖项是否在列表中提到。请注意,你必须使用你依赖项的最新版本,以确保你不依赖过时的带有通配符依赖关系的软件包。

所以...这只是检查直接依赖关系吗?如果我的板条箱依赖于crate-a,而crate-a又依赖于crate-b,而crate-b具有通配符依赖关系,那么:(1)crate-b列在您的列表中(2)查找我的板条箱的依赖项(即[crate-a])对我没有帮助。我理解得对吗?如果是的话,如果您能做这个递归的东西和/或发布您的脚本,那就太棒了。 :) - Lukas Kalbertodt
你必须检查"Cargo.lock"中提到的所有依赖项。最初的文本中有一个拼写错误,它说的是"Cargo.toml"。但是这仅在所有依赖项使用最新的依赖项时才有效。 :-( - Pyfisch
啊,好的,我想我明白了。你能否把你的脚本发给我看看呢?我很感兴趣。另外,我想我会联系cargo-outdated的开发者,询问他们是否想要集成这个功能... - Lukas Kalbertodt
1
这里是生成列表的脚本。cargo-outdated 的开发人员可能更好地实现它,因为正确执行需要了解 semver 以确定所有依赖项的正确版本。 - Pyfisch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接