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 在 命令行工具 中
每月 2,119 次下载
82KB
639 行
cargo-run-bin
在
Cargo.toml
中构建、缓存和运行 CLI 工具,而不是全局安装。停止团队间的版本漂移,在项目内保持同步!
概述
在团队或 CI 中工作时全局安装工具是一个愚蠢的问题。 cargo-run-bin
从 Cargo.toml
中的锁定版本构建、缓存和执行二进制文件。这类似于 npm run
和 gomodrun
,并允许您的团队始终运行相同的工具版本。
对于扩展 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 }
发行版软件包
如果您的发行版已经打包了 cargo-run-bin
,您可以使用该包进行安装。
Arch Linux
pacman -S cargo-run-bin
Alpine Linux
cargo-run-bin
在 Alpine 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 分支。它优先于 tag 和 rev 。 |
tag | 字符串 | false | 当 git 设置时,安装的 git 标签。如果设置 branch ,则优先,并优先于 rev 。 |
rev | 字符串 | false | 当 git 设置时,安装的 git 修订版本。如果设置 branch 或 tag ,则优先。 |
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