现在我们创建了一个账号,保存了 API token,为 crate 选择了一个名字,并指定了所需的元数据,你已
经准备好发布了!发布 crate 会上传特定版本的 crate 到 crates.io 以供他人使用。
发布 crate 时请多加小心,因为发布是 永久性的(permanent)。对应版本不可能被覆盖,其代码也不
可能被删除。crates.io 的一个主要目标是作为一个存储代码的永久文档服务器,这样所有依赖 crates.io
中的 crate 的项目都能一直正常工作。而允许删除版本没办法达成这个目标。然而,可以被发布的版本
号却没有限制。
再次运行 cargo publish 命令。这次它应该会成功:
$ cargo publish
Updating crates.io index
Packaging guessing_game v0.1.0 (file:///projects/guessing_game)
Verifying guessing_game v0.1.0 (file:///projects/guessing_game)
Compiling guessing_game v0.1.0
(file:///projects/guessing_game/target/package/guessing_game-0.1.0)
Finished dev [unoptimized + debuginfo] target(s) in 0.19s
Uploading guessing_game v0.1.0 (file:///projects/guessing_game)
恭喜!你现在向 Rust 社区分享了代码,而且任何人都可以轻松的将你的 crate 加入他们项目的依赖。
发布现存 crate 的新版本
当你修改了 crate 并准备好发布新版本时,改变 Cargo.toml 中 version 所指定的值。请使用 语义化版本
规则 来根据修改的类型决定下一个版本号。接着运行 cargo publish 来上传新版本。
使用 cargo yank 从 Crates.io 撤回版本
虽然你不能删除之前版本的 crate,但是可以阻止任何将来的项目将他们加入到依赖中。这在某个版本
因为这样或那样的原因被破坏的情况很有用。对于这种情况,Cargo 支持 撤回(yanking)某个版本。
撤回某个版本会阻止新项目开始依赖此版本,不过所有现存此依赖的项目仍然能够下载和依赖这个版本。
从本质上说,撤回意味着所有带有 Cargo.lock 的项目的依赖不会被破坏,同时任何新生成的 Cargo.lock
将不能使用被撤回的版本。
为了撤回一个 crate,运行 cargo yank 并指定希望撤回的版本:
$ cargo yank --vers 1.0.1
也可以撤销撤回操作,并允许项目可以再次开始依赖某个版本,通过在命令上增加 −−undo:
$ cargo yank --vers 1.0.1 --undo
撤回 并没有删除任何代码。举例来说,撤回功能并不意在删除不小心上传的秘密信息。如果出现了这种
情况,请立即重新设置这些秘密信息。
Cargo 工作空间
ch14-03-cargo-workspaces.md
commit 7ddc28cfe0bfa6c531a6475c7fa41dfa66e8943c
第十二章中,我们构建一个包含二进制 crate 和库 crate 的包。你可能会发现,随着项目开发的深入,库
crate 持续增大,而你希望将其进一步拆分成多个库 crate。对于这种情况,Cargo 提供了一个叫 工作空
间(workspaces)的功能,它可以帮助我们管理多个相关的协同开发的包。
创建工作空间
工作空间是一系列共享同样的 Cargo.lock 和输出目录的包。让我们使用工作空间创建一个项目 —— 这
里采用常见的代码以便可以关注工作空间的结构。有多种组织工作空间的方式;我们将展示一个常用方
法。我们的工作空间有一个二进制项目和两个库。二进制项目会提供主要功能,并会依赖另两个库。一
个库会提供 add_one 方法而第二个会提供 add_two 方法。这三个 crate 将会是相同工作空间的一部分。
让我们以新建工作空间目录开始:
$ mkdir add
$ cd add
接着在 add 目录中,创建 Cargo.toml 文件。这个 Cargo.toml 文件配置了整个工作空间。它不会包含
[package] 或其他我们在 Cargo.toml 中见过的元信息。相反,它以 [workspace] 部分作为开始,并通过
指定 adder 的路径来为工作空间增加成员,如下会加入二进制 crate:
文件名: Cargo.toml
[workspace]
members = [
“adder”,
]
接下来,在 add 目录运行 cargo new 新建 adder 二进制 crate:
$ cargo new adder
Created binary (application) adder
package
到此为止,可以运行 cargo build 来构建工作空间。add 目录中的文件应该看起来像这样:
Cargo.lock
Cargo.toml
adder
Cargo.toml
src
main.rs
target
工作空间在顶级目录有一个 target 目录;adder 并没有自己的 target 目录。即使进入 adder 目录运行
cargo build,构建结果也位于 add∕target 而不是 add∕adder∕target。工作空间中的 crate 之间相互依
赖。如果每个 crate 有其自己的 target 目录,为了在自己的 target 目录中生成构建结果,工作空间中
的每一个 crate 都不得不相互重新编译其他 crate。通过共享一个 target 目录,工作空间可以避免其他
crate 多余的重复构建。
Rust从入门到实战系列一百六十一:发布到 Crates.io
最新推荐文章于 2024-05-14 09:37:19 发布