Rust Cargo 中 Top 10 的命令

大家好,我是螃蟹哥。

Cargo 是 Rust 的包管理器,是一個功能強大的工具,可以讓 Rust 編程變得非常有趣。它提供了可以在你日常編程中使用的各種命令。Cargo 支持的命令列表可以通過社區編寫的 Rust crates 進行擴展。

一系列命令使 Cargo 成爲任何 Rust 開發人員都值得了解的多功能工具。

本文講解一系列值得了解和使用的有用 Cargo 命令。

最重要的 Cargo 指令

1. cargo install [options] crate...

cargo install 用於構建和安裝 Rust 二進制文件。可以從多個來源安裝 crate。默認位置是 crates.io,但是--git--path--registry選項可以更改源。

示例:cargo install sqlx 是使用 cargo 從 crates.io 安裝 sqlx crate。

2. cargo uninstall [options] [spec...]

顧名思義,這個命令會刪除一個用 cargo install 安裝的包。

3. cargo tree [options]

cargo 樹將顯示對終端的依賴關係樹。一個依賴於 “rand” 包的簡單項目的例子:

myproject v0.1.0 (/myproject)
└── rand v0.7.3
    ├── getrandom v0.1.14
    │   ├── cfg-if v0.1.10
    │   └── libc v0.2.68
    ├── libc v0.2.68 (*)
    ├── rand_chacha v0.2.2
    │   ├── ppv-lite86 v0.2.6
    │   └── rand_core v0.5.1
    │       └── getrandom v0.1.14 (*)
    └── rand_core v0.5.1 (*)
[build-dependencies]
└── cc v1.0.50

4. cargo search [options] [query...]

這會在 crates.io 上對 crate 執行文本搜索。匹配的 crate 將與它們的描述一起以複製到 Cargo.toml 清單,以 TOML 格式顯示。

使用 cargo 搜索的例子是:cargo search serde,它返回一個帶有文本 serde 的行的 crate 列表和一個包含它們的版本號的描述。

serde = "1.0.130"                         # A generic serialization/deserialization framework
discord_typed_interactions = "0.1.0"      # suppose you're working with discord slash commands and you want statically typed requ…
serde_json_experimental = "1.0.29-rc1"    # A JSON serialization file format
alt_serde_json = "1.0.61"                 # A JSON serialization file format
serde_json = "1.0.70"                     # A JSON serialization file format
serde_partiql = "1.1.65"                  # A PartiQL data model serialization file format
cargo-geiger = "0.11.1"                   # Detects usage of unsafe Rust in a Rust crate and its dependencies.
serde-encrypt = "0.6.0"                   # Encrypts all the Serialize
serde-encrypt-core = "0.6.0"              # Encrypts all the Serialize
typescript-definitions = "0.1.10"         # serde support for exporting Typescript definitions
... and 2787 crates more (use --limit N to see more)

5. cargo-edit

此工具擴展 Cargo 以允許你通過從命令行修改 Cargo.toml 文件來添加、刪除和升級依賴項。

當前可用的子命令包括:

要使用 cargo-edit,你需要先安裝它,cargo install cargo-edit因爲它是一個 cargo 擴展。

6. cargo +nightly udeps

cargo-udeps 用於在 Cargo.toml 中查找未使用的依賴項。

雖然這個工具的編譯也適用於 Rust stable,但它需要 nightly Rust 才能實際運行。cargo-udeps是一個 cargo 擴展,所以你必須先安裝才能使用。

你可以通過以下命令安裝 cargo install cargo-udeps --locked

7. cargo expand

安裝後,cargo expand打印出應用於當前 crate 的宏擴展結果和 #[derive] 擴展。這是詳細的編譯器命令的包裝器:cargo rustc --profile=check -- -Zunpretty=expanded

通過以下命令安裝 cargo install cargo-expand.

使用 cargo-expand 的例子

#[derive(Debug)]
struct S;

fn main() {
    println!("{:?}", S);
}

cargo expand:

#[prelude_import]
use std::prelude::v1::*;
#[macro_use]
extern crate std;
struct S;
#[automatically_derived]
#[allow(unused_qualifications)]
impl ::core::fmt::Debug for S {
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match *self {
            S ={
                let mut debug_trait_builder = f.debug_tuple("S");
                debug_trait_builder.finish()
            }
        }
    }
}
fn main() {
    {
        ::std::io::_print(::core::fmt::Arguments::new_v1(
            &["""\n"],
            &match (&S,) {
                (arg0,) =[::core::fmt::ArgumentV1::new(arg0, ::core::fmt::Debug::fmt)],
            },
        ));
    };
}

8. cargo tarpaulin

Tarpaulin 是 Cargo 構建系統的代碼覆蓋率報告工具。

通過以下命令安裝:cargo install cargo-tarpaulin。目前 tarpaulin 僅適用於運行 Linux 的 x86_64 CPU 架構。cargo tarpaulin --ignore-tests用於計算應用程序的代碼覆蓋率,同時忽略測試功能。

9. cargo audit

cargo audit 可以通過命令 cargo install cargo-audit 安裝並用於審覈 Cargo.lock 文件,以查找向 RustSec 諮詢數據庫 報告的具有安全漏洞的 crate。

10. cargo deny

cargo-deny 是一個 cargo 插件,可讓你檢查項目的依賴關係圖,以確保所有依賴項符合你的期望和要求。

它用於審覈 Cargo.lock 文件中是否存在安全漏洞、限制特定依賴項的使用、它們的許可證、下載源、檢測依賴項樹中相同包的多個版本等等。

cargo install --locked cargo-deny && cargo deny init && cargo deny check安裝 cargo-deny,使用默認配置初始化你的項目,然後針對你的項目運行所有檢查。

以下示例檢查許可,用於驗證你使用的每個 crate 是否具有你認爲可接受的許可條款。

cargo deny check licenses

要了解有關如何使用 cargo deny 的更多信息,訪問 https://embarkstudios.github.io/cargo-deny/。

Cargo 命令的列表非常多,本文提供了其中的一個小示例,你可以使用它們,希望你瞭解 Cargo 的強大功能。

原文鏈接:https://dev.to/davidadewoyin/top-rust-cargo-commands-2b70

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/ckzgn0JzdHM8Q7TdNjUdBw