喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(=・ω・=)
14.4.1. 创建并设置crates.io账号
在发布任何 crate 之前,你需要在 crates.io并获取 API 令牌。为此,请访问crates.io主页并登录GitHub帐户(目前只支持GitHub帐户登录)。 如果已登录,打开的帐户设置: https://crates.io/me/并找到API密钥。然后在本地使用cargo login
命令并在出现提示时粘贴您的API密钥:
$ cargo login
just1a1nexample
此命令将通知Cargo你的API令牌并将其本地存储在 ~/.cargo/credentials
。要注意的是,此令牌不能与其他任何人共享。如果你泄露了,应该撤销它并在crates.io上生成一个新令牌。
14.4.2. 将元数据添加到crate
在发布crate之前还需要在Cargo.toml
文件里的[package]
这个区域添加一些元数据:
- 首先你要确保项目名称在网站上是独一无二。
- 其次还需要写
description
,也就是介绍,但是不需要太多,一两句话就可以。description
的内容会出现在crate
搜索的结果里。 - 你需要提供这个crate遵循的许可证标识值(可以到spdx.org/licenses/中查找),可以指定多个,用
OR
隔开,写在license
。 - 语义版本信息(写在
version
) - 作者(写在
author
)
当然可以写的信息不止这些,具体可以参阅cargo手册。
整个[Package]
区域的写法应该如下:
[package]
name = "guessing_game"
version = "0.1.0"
edition = "2021"
description = "A fun game where you guess what number the computer has chosen."
license = "MIT OR Apache-2.0"
14.4.3. 使用命令发布crate
使用命令cargo publish
即可发布crate,但是前提是元数据完整且项目名不重复。
cargo publish
正常运行时会向你在crates.io中的账号登记的邮箱发送验证邮件,去收件箱确认即可。
如果出现问题,cargo publish
会报错:
$ cargo publishUpdating crates.io index
warning: manifest has no description, license, license-file, documentation, homepage or repository.
See https://doc.rust-lang.org/cargo/reference/manifest.html#package-metadata for more info.
......
error: failed to publish to registry at https://crates.ioCaused by:the remote server responded with an error: missing or empty metadata fields: description, license. Please see https://doc.rust-lang.org/cargo/reference/manifest.html for how to upload metadata
中间我省略了一部分,看Caused by
这部分说是缺少元数据导致的错误。
crate一旦发布就是永久性的:该版本无法覆盖,代码无法删除。 这样做是为了依赖于该版本的项目可以继续正常工作。
14.4.4. 发布新版本的crate
如果你需要为已经存在的crate发布最新版本,可以在修改crate源代码后把Cargo.toml
中的version
值按照语义化版本规范修改,再进行重新发布。
14.4.5. 撤回版本
撤回版本会使新的要使用这个crate的项目不能依赖于这个版本,但是已经基于这个版本写出的项目仍然可以使用并可下载。
其指令是cargo yank --vers 指定的版本
。例如要撤回1.0.1版本,就写:
cargo yank --vers 1.0.1
如果你撤回之后又改了主意,想要取消撤回,写:
cargo yank --vers 1.0.1 --undo
yank
意味着:
- 所有已经生成
Cargo.lock
的项目都不会因版本被撤回而中断 - 所有将来生成的
Cargo.lock
文件都不会使用被撤回的版本