在你可以发布任何 crate 之前,需要在 crates.io 上注册账号并获取一个 API token。为此,访问位于
crates.io 的首页并使用 GitHub 账号登陆。(目前 GitHub 账号是必须的,不过将来该网站可能会支持其
他创建账号的方法)一旦登陆之后,查看位于 https:∕∕crates.io∕me∕ 的账户设置页面并获取 API token。
接着使用该 API token 运行 cargo login 命令,像这样:
$ cargo login abcdefghijklmnopqrstuvwxyz012345
这个命令会通知 Cargo 你的 API token 并将其储存在本地的 ∕.cargo∕credentials 文件中。注意这个
token 是一个 秘密(secret)且不应该与其他人共享。如果因为任何原因与他人共享了这个信息,应该
立即到 crates.io 重新生成这个 token。
发布新 crate 之前
有了账号之后,比如说你已经有一个希望发布的 crate。在发布之前,你需要在 crate 的 Cargo.toml 文
件的 [package] 部分增加一些本 crate 的元信息(metadata)。
首先 crate 需要一个唯一的名称。虽然在本地开发 crate 时,可以使用任何你喜欢的名称。不过 crates.io
上的 crate 名称遵守先到先得的分配原则。一旦某个 crate 名称被使用,其他人就不能再发布这个名称
的 crate 了。请在网站上搜索你希望使用的名称来找出它是否已被使用。如果没有,修改 Cargo.toml 中
[package] 里的名称为你希望用于发布的名称,像这样:
文件名: Cargo.toml
[package]
name = “guessing_game”
即使你选择了一个唯一的名称,如果此时尝试运行 cargo publish 发布该 crate 的话,会得到一个警告
接着是一个错误:
$ 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.
–snip–
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
这是因为我们缺少一些关键信息:关于该 crate 用途的描述和用户可能在何种条款下使用该 crate 的
license。为了修正这个错误,需要在 Cargo.toml 中引入这些信息。
描述通常是一两句话,因为它会出现在 crate 的搜索结果中和 crate 页面里。对于 license 字段,你需要
一个 license 标识符值(license identifier value)。Linux 基金会的 Software Package Data Exchange
(SPDX) 列出了可以使用的标识符。例如,为了指定 crate 使用 MIT License,增加 MIT 标识符:
文件名: Cargo.toml
[package]
name = “guessing_game”
license = “MIT”
如果你希望使用不存在于 SPDX 的 license,则需要将 license 文本放入一个文件,将该文件包含进项目
中,接着使用 license−file 来指定文件名而不是使用 license 字段。
关于项目所适用的 license 指导超出了本书的范畴。很多 Rust 社区成员选择与 Rust 自身相同的 license,
这是一个双许可的 MIT OR Apache−2.0。这个实践展示了也可以通过 OR 分隔为项目指定多个 license
标识符。
那么,有了唯一的名称、版本号、由 cargo new 新建项目时增加的作者信息、描述和所选择的 license,
已经准备好发布的项目的 Cargo.toml 文件可能看起来像这样:
文件名: Cargo.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”
[dependencies]
Cargo 的文档 描述了其他可以指定的元信息,他们可以帮助你的 crate 更容易被发现和使用!
Rust从入门到实战系列一百六十:创建 Crates.io 账号
最新推荐文章于 2024-03-31 16:36:07 发布