从碎片化到标准化:cargo-bp 如何重构 Rust 开发逻辑
Rust 社区一直有极小标准库这一设计哲学,这导致生态碎片化严重。在这一设计哲学下,所有业务能力、工程能力全部交给社区 crate 实现,看似灵活的设计,实则给开发者埋下了巨大的隐性成本。而 cargo-bp 就是 Rust 社区为了解决这一痛点所进行的一次尝试。
cargo-bp 是什么?
cargo-bp 的 bp 是 Battery Pack,电池组的含义。它的核心思路很简单:把 Rust 项目中大家都会重复配置的东西,打包成可复用电池组。例如:CLI 项目电池组、CI/CD 电池组、错误处理电池组、日志电池组、Web 电池组等等。
开发者不再需要进行繁琐的配置,由一个个电池组来提供最佳实践,开发者只需要:
shell
# 添加 cli 电池组
cargo bp add cli
众所周知,Rust 社区已经有大量的 crates 成为了非官方的事实标准库,如 tracing、serde 等等,电池组的作用在于让这些隐性标准库显性化。
安装
cargo-bp 支持两种主流的安装方式:
shell
cargo install cargo-bp
# or
cargo binstall cargo-bp
安装完成后,可配置 shell 自动补全,提升操作效率:
shell
# zsh 环境
source <(cargo bp completions zsh)
# bash 环境
source <(cargo bp completions bash)
# fish 环境
source <(cargo bp completions fish)
使用示例
首先,我们可以通过下面的命令获取到当前有哪些电池组:
shell
cargo bp list

电池组大致有两种使用方式,第一种是通过电池组内置的项目模板来进行初始化项目:
shell
cargo bp new cli --name cli-demo
上面这条命令的含义是使用 cli 电池组进行初始化项目,项目名称为 cli-demo。
初始化项目后,如下所示:
plaintext
.
├── build.rs
├── Cargo.toml
├── src
│ └── main.rs
└── tests
├── cli.rs
└── snapshots
└── cli__help.txt
除了项目模板初始化的代码外,最主要的是看 battery-pack.toml 这个文件,它包含了与电池组所有的相关信息。
第二种使用电池组的方式是在已有项目中添加电池组:
shell
cargo new cli-demo
cd cli-demo
cargo bp add cli
它会为你添加上电池组的相关依赖。除此之外,如果需要更新依赖,可以通过更新电池组的方式进行:
shell
cargo bp sync
如果需要移除电池组,可以通过 remove 命令进行:
shell
cargo bp remove cli
维护自己的电池组
除了官方提供的电池组外,我们还可以维护自己的电池组,这里我们依旧通过 cargo-bp 来初始化电池组模板:
shell
cargo bp new battery-pack --name my-battery-pack
这里我不打算细说,推荐你直接看官方文档了解。
结语
cargo-bp 仍处于项目早期阶段,这篇文章主要目的是帮助读者了解下 Rust 社区的一些前沿动态。虽然项目的迭代,电池组这一概念会将会给 Rust 社区带来巨大的变化,填补官方极小标准库带来的问题,逐渐形成形成标准库+电池组双生态体系。
从生态发展逻辑来看,cargo-bp 绝非昙花一现的工具,而是 Rust 生态进化的必然产物。它没有颠覆 Rust 极小标准库这一设计哲学,而是以轻量化、无侵入地的方式补齐了 Rust 在工程化方面的短板。