【Rust自学】14.4. 发布crate到crates.io 14.4 发布 crate Pt.214.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.toml。要注意的是此令牌不能与其他任何人共享。如果你泄露了应该撤销它并在 crates.io 上生成一个新令牌。14.4.2 将元数据添加到 crate在发布 crate 之前还需要在Cargo.toml文件里的[package]区域添加一些元数据- 首先你要确保项目名称在网站上是独一无二的。- 其次还需要写description也就是简短介绍不需要太长一两句话就可以。description的内容会出现在 crate 搜索结果里。- 你需要提供这个 crate 使用的许可证标识值可以到 spdx.org/licenses/ 中查找可以指定多个许可证用OR隔开写在license。- 语义版本 信息写在version。当然可以写的信息不止这些具体可以参阅 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.014.4.3 使用命令发布 crate使用命令cargo publish即可发布 crate但前提是元数据完整且项目名唯一。此外你的 crates.io 账号还必须先完成邮箱验证才允许发布。如果出现问题cargo publish会报错$ cargo publish Updating 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.io Caused 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 撤回版本撤回版本会使新项目不能依赖于这个版本但是已经基于这个版本构建的项目仍然可以使用并可下载。其指令是cargo yank --vers 指定的版本。例如要撤回 1.0.1 版本就写cargo yank --vers 1.0.1如果你撤回之后又改了主意想要取消撤回写cargo yank --vers 1.0.1 --undoyank意味着- 所有已经生成Cargo.lock的项目都不会因版本被撤回而中断。- 所有将来生成的Cargo.lock文件都不会使用被撤回的版本。