【Rust自学】14.4. 发布crate到crates.io

喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(=・ω・=)

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]区域的写法应该如下:

toml 复制代码
[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 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. 撤回版本

撤回版本会使新的要使用这个crate的项目不能依赖于这个版本,但是已经基于这个版本写出的项目仍然可以使用并可下载。

其指令是cargo yank --vers 指定的版本。例如要撤回1.0.1版本,就写:

bash 复制代码
cargo yank --vers 1.0.1

如果你撤回之后又改了主意,想要取消撤回,写:

bash 复制代码
cargo yank --vers 1.0.1 --undo

yank意味着:

  • 所有已经生成Cargo.lock的项目都不会因版本被撤回而中断
  • 所有将来生成的Cargo.lock文件都不会使用被撤回的版本
相关推荐
blog_wanghao16 小时前
基于Qt的串口调试助手
开发语言·qt
AI茶水间管理员16 小时前
学习ClaudeCode源码之Agent核心循环
前端·人工智能·后端
Reart16 小时前
从0解构tinyWeb项目--(Day:2)
javascript·后端·架构
果汁华17 小时前
Typer:基于类型提示的现代Python CLI框架
开发语言·网络·python
也许明天y17 小时前
Spring AI 实战:基于钉钉的智能 Agent 架构设计与实现
后端·agent
赵药师17 小时前
多进程-生产者消费者C++实现
java·开发语言·jvm
XPoet17 小时前
AI 编程工程化:Subagent——给你的 AI 员工打造协作助手
前端·后端·ai编程
雾岛听蓝17 小时前
Linux线程基础
linux·开发语言·经验分享
zhangzeyuaaa17 小时前
Python 异常机制深度剖析
开发语言·python
whitelbwwww17 小时前
C++基础--类型、函数、作用域、指针、引用、文件
开发语言·c++