#cargo-toml #cache #bin #cargo-install #cli #extension #developer-experiance

bin+lib cargo-run-bin

在 Cargo.toml 中构建、缓存和运行二进制文件,而不是全局安装。这类似于 npm run 和 gomodrun,并允许您的团队始终运行相同的工具版本。

27 个版本 (稳定)

1.7.3 2024 年 7 月 5 日
1.7.2 2024 年 1 月 2 日
1.6.1 2023 年 12 月 16 日
1.5.0 2023 年 10 月 27 日
0.1.0 2021 年 5 月 30 日

207命令行工具

Download history 78/week @ 2024-04-27 100/week @ 2024-05-04 288/week @ 2024-05-11 283/week @ 2024-05-18 349/week @ 2024-05-25 556/week @ 2024-06-01 370/week @ 2024-06-08 474/week @ 2024-06-15 567/week @ 2024-06-22 687/week @ 2024-06-29 429/week @ 2024-07-06 499/week @ 2024-07-13 633/week @ 2024-07-20 595/week @ 2024-07-27 368/week @ 2024-08-03 438/week @ 2024-08-10

每月 2,119 次下载

MIT 许可证

82KB
639

cargo-run-bin

cargo-run-bin

Build status Coverage Status Crates.io

Cargo.toml 中构建、缓存和运行 CLI 工具,而不是全局安装。停止团队间的版本漂移,在项目内保持同步!

概述

在团队或 CI 中工作时全局安装工具是一个愚蠢的问题。 cargo-run-binCargo.toml 中的锁定版本构建、缓存和执行二进制文件。这类似于 npm rungomodrun,并允许您的团队始终运行相同的工具版本。

对于扩展 cargo 的命令行,如 cargo-nextest,run-bin 将创建并管理 cargo 别名,以便在不更改您的命令行脚本的情况下使用 cargo 扩展! cargo-run-bin 不会干扰您,您甚至可能会忘记您在使用它!

安装

最低 Rust 版本:1.70.0

运行以下命令安装 cargo-run-bin,并在项目中忽略缓存目录。

cargo install cargo-run-bin
cd my/rust/project
echo ".bin/" >> .gitignore

您也可以将其作为库集成到现有的逻辑中。

[dependencies]
cargo-run-bin = { version = "1.7.2", default-features = false }

发行版软件包

打包状态

Packaging status

如果您的发行版已经打包了 cargo-run-bin,您可以使用该包进行安装。

Arch Linux

您可以使用 pacmanextra 仓库 安装。

pacman -S cargo-run-bin

Alpine Linux

cargo-run-binAlpine Edge 中可用。启用 测试仓库 后,可以通过 apk 安装。

apk add cargo-run-bin

用法

cargo-run-bin 会跟踪 Cargo.toml 文件中的二进制文件及其版本,位于 [package.metadata.bin] 表格下。以下是一个从这个仓库取出的快速示例

[package.metadata.bin]
cargo-binstall = { version = "1.1.2" }
cargo-nextest = { version = "0.9.57", locked = true }
dprint = { version = "0.30.3" }
cargo-mobile2 = { version = "0.5.2", bins = ["cargo-android", "cargo-mobile"], locked = true }

或者如果您正在设置工作空间

[workspace.metadata.bin]
cargo-binstall = { version = "1.1.2" }
cargo-nextest = { version = "0.9.57", locked = true }
参数 类型 必需 描述
version 字符串 true 指定 crate 的版本。
bins Vec<字符串> false 一个包含您希望构建的二进制文件的 crate 数组。这些可以在 crate 的 Cargo.toml 文件中找到。参见 cargo-mobile2 作为示例。
locked 布尔值 false 当设置为 true 时,使用 --locked 参数运行 cargo install
features Vec<字符串> false 一个要启用的 crate 特性数组。
default-features 布尔值 false 当设置为 false 时,禁用所有默认特性。
git 字符串 false 一个 git URL,从该 URL 安装而不是从 crates.io。如果 Binstall 可用,它也将用于查找 Cargo manifest。
branch 字符串 false git 设置时,安装的 git 分支。它优先于 tagrev
tag 字符串 false git 设置时,安装的 git 标签。如果设置 branch,则优先,并优先于 rev
rev 字符串 false git 设置时,安装的 git 修订版本。如果设置 branchtag,则优先。
path 字符串 false 安装本地 crate 的路径。

如果您喜欢预构建的二进制文件和快速的下载,run-bin 将使用全局安装的 cargo-binstall,或者配置在 [package.metadata.bin] 中,而不是从源构建工具。

cargobin CRATE

dprint 为例,运行 cargo bin dprint --help 并将指定版本的 dprint 二进制文件安装/构建到 Cargo.toml 中。所有未来的执行都将立即运行而无需安装步骤,您可以使用 dprint 如您所愿!

cargobin --sync-aliases

利用 cargo 别名 功能,使用以下命令 cargo bin --sync-aliases 可以为任何 cargo-* 包创建别名,使得你可以执行如 cargo nextest run 这样的命令,这些命令在底层将使用 cargo bin。请查看 此仓库 中的示例。

cargobin --安装

在拉取新的仓库或在 CI 中添加步骤时,cargo bin --install 将安装或构建所有在 Cargo.toml 中配置的未缓存的二进制文件。

run-bin 也可以用作库,并与你的 build.rs 或其他脚本配合使用。以下示例演示了如何在 [package.metadata.bin] 中配置 dprint,并执行 dprint --help

[package.metadata.bin]
dprint = { version = "0.40.2" }
use anyhow::Result;
use cargo_run_bin::{binary, metadata};

fn main() -> Result<()> {
    let binary_package = metadata::get_binary_packages()?
        .iter()
        .find(|e| e.package == "dprint")
        .unwrap()
        .to_owned();
    let bin_path = binary::install(binary_package)?;
    binary::run(bin_path, vec!["--help".to_string()])?;

    return Ok(());
}

使用 binary::run 是可选的。你可以使用 std::process 重新创建它,并根据需要进行修改,包括使用模拟器!

use std::process;

use anyhow::Result;
use cargo_run_bin::{binary, metadata, shims};

fn main() -> Result<()> {
    let binary_package = metadata::get_binary_packages()?
        .iter()
        .find(|e| e.package == "dprint")
        .unwrap()
        .to_owned();
    let bin_path = binary::install(binary_package)?;

    let mut shell_paths = shims::get_shim_paths()?;
    shell_paths.push(env::var("PATH").unwrap_or("".to_string()));

    process::Command::new(bin_path)
        .args(["--help"])
        .env("PATH", shell_paths.join(":"))
        .spawn();

    return Ok(());
}

许可证

MIT.

依赖

~4–13MB
~178K SLoC