【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文件都不会使用被撤回的版本
相关推荐
点光4 小时前
使用Sentinel作为Spring Boot应用限流组件
后端
不要秃头啊4 小时前
别再谈提效了:AI 时代的开发范式本质变了
前端·后端·程序员
有志5 小时前
Java 项目添加慢 SQL 查询工具实践
后端
山佳的山5 小时前
KingbaseES 共享锁(SHARE)与排他锁(EXCLUSIVE)详解及测试复现
后端
Leo8995 小时前
rust 从零单排 之 一战到底
后端
程序员清风6 小时前
程序员兼职必看:靠谱软件外包平台挑选指南与避坑清单!
java·后端·面试
鱼人7 小时前
MySQL 实战入门:从“增删改查”到“高效查询”的核心指南
后端
大鹏19887 小时前
告别 Session:Spring Boot 实现 JWT 无状态登录认证全攻略
后端
Java编程爱好者7 小时前
从 AQS 到 ReentrantLock:搞懂同步队列与条件队列,这一篇就够了
后端
鱼人7 小时前
Nginx 全能指南:从反向代理到负载均衡,一篇打通任督二脉
后端