rust 在多个板条箱项目上仅发布一个父板条箱

jexiocij  于 2022-11-12  发布在  其他
关注(0)|答案(2)|浏览(122)

我正在创建一个库,它几乎接近于它的第一个版本,所以我想把它上传到crates.io。库有一个多机箱设计,所以我以这样的内容结束:

- CrateA
- CrateProcMacros
- CrateC
- CrateD
- CrateE
- CrateF
- Cargo.toml (handles the workspace)
- Cargo.lock
...

其中CrateA是其他板条箱的父级,并且依赖于另一个本地板条箱,其中一些板条箱还依赖于另一个板条箱。我的意思是,它是库的主板条箱,负责公开项目的公共API,并且是我希望在crates.io中发布的唯一板条箱。
阅读cargo docs时,我发现我无法向注册表中发布唯一的板条箱。所有的板条箱都将被上传和发布。
那么,我有什么选择只把我的CrateA发布到注册表呢?我应该改变我的项目的结构,把所有其他的包都移到CrateA,然后尝试发布它吗?或者有什么方法可以实现这一点?

编辑

CrateA直接依赖于其他板条箱。其他板条箱也依赖于我的工作区中的另一个板条箱。

gab6jxml

gab6jxml1#

Cargo打包的工作方式是,* 您发布的源代码 * 几乎没有变化。没有预编译步骤。没有将多个库板条箱聚集到一个包中的步骤。唯一发布CrateA的方法是同时发布它的所有依赖项。
人们对使多机箱项目更容易发布很感兴趣,但现在,您必须显式地完成这一切。
1.确保项目中的每个包都声明了一个在公共场合有意义的[package] name。(保存它的目录名并不重要。)通常会有像myproject-partoftheproject这样的名称,而人们实际使用的包通常会被命名为myproject
1.确保每个依赖项声明都有一个version编号(而不仅仅是一个path),它与要发布的内容相匹配。(您不必删除path;这将在出版物中为您完成。)
1.发布每个包。必须按相反的依赖关系顺序执行此操作,即最后发布CrateA
没有人会介意你发布了不直接使用的额外包--例如,很多库都有单独的proc-macro包。但是,如果你有一些“只是”用于代码组织的包,并且没有任何特别的好处,你可以考虑将它们放入更少的包中的模块中。

dfddblmv

dfddblmv2#

货爷,我应该这样

[workspace]
members = [
    "CrateA",
    "CrateB",
    ...
]

和CrateA/Cargo.toml应该是这样的

[package]
name = "Foo"
version = "0.0.0"
edition = "2021"
authors = ["Foo <Foo@gmail.com>"]
license = "Bar"
description = "Baz"
[dependencies]
CrateB = { path = "../CrateB", version = "0.0.0" }
CrateC = "0.0.0"

相关问题