我正在创建一个库,它几乎接近于它的第一个版本,所以我想把它上传到crates.io
。库有一个多机箱设计,所以我以这样的内容结束:
- CrateA
- CrateProcMacros
- CrateC
- CrateD
- CrateE
- CrateF
- Cargo.toml (handles the workspace)
- Cargo.lock
...
其中CrateA
是其他板条箱的父级,并且依赖于另一个本地板条箱,其中一些板条箱还依赖于另一个板条箱。我的意思是,它是库的主板条箱,负责公开项目的公共API,并且是我希望在crates.io
中发布的唯一板条箱。
阅读cargo docs时,我发现我无法向注册表中发布唯一的板条箱。所有的板条箱都将被上传和发布。
那么,我有什么选择只把我的CrateA
发布到注册表呢?我应该改变我的项目的结构,把所有其他的包都移到CrateA
,然后尝试发布它吗?或者有什么方法可以实现这一点?
编辑
CrateA
直接依赖于其他板条箱。其他板条箱也依赖于我的工作区中的另一个板条箱。
2条答案
按热度按时间gab6jxml1#
Cargo打包的工作方式是,* 您发布的源代码 * 几乎没有变化。没有预编译步骤。没有将多个库板条箱聚集到一个包中的步骤。唯一发布
CrateA
的方法是同时发布它的所有依赖项。人们对使多机箱项目更容易发布很感兴趣,但现在,您必须显式地完成这一切。
1.确保项目中的每个包都声明了一个在公共场合有意义的
[package] name
。(保存它的目录名并不重要。)通常会有像myproject-partoftheproject
这样的名称,而人们实际使用的包通常会被命名为myproject
。1.确保每个依赖项声明都有一个
version
编号(而不仅仅是一个path
),它与要发布的内容相匹配。(您不必删除path
;这将在出版物中为您完成。)1.发布每个包。必须按相反的依赖关系顺序执行此操作,即最后发布
CrateA
。没有人会介意你发布了不直接使用的额外包--例如,很多库都有单独的proc-macro包。但是,如果你有一些“只是”用于代码组织的包,并且没有任何特别的好处,你可以考虑将它们放入更少的包中的模块中。
dfddblmv2#
货爷,我应该这样
和CrateA/Cargo.toml应该是这样的