我能发布使用补丁的crate吗?

3
该 Rust 文档中讨论 patching 的章节解释了如何实现补丁,但它所使用的所有示例都是用于“测试”和短期修复。我想做的是为我依赖的其中一个 crate 制作一个补丁,以提升其子依赖项,然后我想发布我的 crate 以及其已打好补丁的依赖项到 crates.io。但是,在创建补丁时,您必须列出路径依赖项,就像示例中所示:
[patch.crates-io]
uuid = { path = "../path/to/uuid" }

我假设这会阻止我发布我的箱子,因为我现在依赖于不在crates.io上的东西。

因此,我的问题是:我能否发布一个使用本地补丁的箱子到crates.io?如果不能,是否有其他解决办法?

1个回答

3

不支持使用路径作为依赖

注意:crates.io 不允许发布包含路径依赖的软件包(路径 dev 依赖会被忽略)。请参见多位置部分,了解备用方案。

可以同时指定注册表版本和 git 或路径依赖项。Git 或路径依赖项将在本地使用(此时将检查版本与本地副本是否匹配),并在发布到像 crates.io 这样的注册表时使用注册表版本。不允许其他组合。

您需要将依赖项上传到 crates.io 上。


你发的链接是指在 Cargo.toml[dependencies] 部分列出的 crates,但我说的是列在 [patch.crates-io] 部分下的 crates。这个链接还适用吗? - Migwell
@Migwell 我在这个页面上没看到任何关于你能不能这么做的内容。你可能需要自己尝试一下。 - Colonel Thirty Two
确实。如果我尝试使用 cargo publish --dry-run 进行发布,它会使用未经过我的补丁的原始 Cargo 版本,这意味着构建失败。因此看起来你不能使用补丁进行发布。 - Migwell

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