手把手带你使用 Bacon 高效开发应用

手把手带你使用 Bacon 高效开发应用

说来很神奇,Bacon 这么好用的开发工具,国内几乎没有文章或视频来讲它,所以我们今天一起来使用这个自动化工具提高开发效率。

Bacon 是什么?

我们知道在每个编程语言生态中,基本上都会有自己的热更新方案用于提高开发效率,在 Rust 的生态中有 cargo-watch,可惜的是,cargo-watch 现在是处于维护状态,不会再有新的更新。在 GitHub 中,作者说明了为什么不再更新 cargo-watch,同时在文末,他强烈推荐了 Bacon。

Bacon 自称是一款后台运行的代码检查工具,它的设计旨在实现最少的交互,让你可以让它在你的编辑器旁边运行,同时收到 Rust 代码中警告、错误或测试失败的通知。

听起来可能还会觉得不知道在说什么,我这里用一句话总结:不用手动敲 cargo xxx 命令,保存代码后自动检查、自动编译、自动重启、自动跑测试。

安装 Bacon

安装 Bacon 是很容易的,使用 Cargo 就可以安装:

shell 复制代码
cargo install --locked bacon

如果想更新 Bacon,也请运行此命令。配置一直向后兼容,所以不会丢失任何内容。

部分功能默认处于禁用状态。你可以通过以下方式启用它们:

shell 复制代码
cargo install --features "clipboard sound" --locked bacon

快速上手

这里我们用一个简单的示例,带你了解 Bacon 能做什么。首先,新建一个项目:

shell 复制代码
cargo new bacon-demo
cd bacon-demo

初始化配置文件:

shell 复制代码
bacon --init

执行完成后,Bacon 会自动生成一个配置文件 bacon.toml,这个配置文件我们会在后面的章节中来讲。接下来,我们在终端中运行 Bacon:

shell 复制代码
bacon

执行命令后,我们会看到如下的终端画面:

输出 CTRL + J 打开任务列表:

我们这里要用 run 任务进行演示,run 任务是在配置文件 bacon.toml 中配置好的,作用是运行程序。现在移动到 run 任务然后键入回车执行:

可以看到终端输出了 Hello, world!,接下来我们打开 src/main.rs 修改代码,修改输出内容后进行保存,然后就可以看到终端内容发生改变了,是我们修改的输出内容:

至此,我们就大概知道 Bacon 能做什么了,它会自动检测我们的项目文件,一旦发生变更,就会自动触发执行当前正在运行的任务。

配置文件

打开配置文件 bacon.toml,我们一起来看一看它。

toml 复制代码
default_job = "check"
env.CARGO_TERM_COLOR = "always"

default_job 是指定默认的任务,这里设置的默认任务是 check;而 env 是修改环境变量,这里相当于是:

shell 复制代码
export CARGO_TERM_COLOR=always

在看后面定义任务的部分:

toml 复制代码
[jobs.check]
command = ["cargo", "check"]
need_stdout = false

这里首先定义了一个名为 check 的任务;command 是它执行的命令,数组格式,而 need_stdout 是声明是否捕获 stdout,即标准输出。

任务除了 command、need_stdout 这些配置项外,还有:

配置项 类型 说明 默认值
command 数组 要执行的命令(第一个元素为可执行文件)
watch 数组 监控的目录与文件
default_watch 布尔 默认监听的目录与文件,包括 src、tests、examples、build.rs, 和 benches true
need_stdout 布尔 是否捕获 stdout(stderr 始终捕获) false
allow_warnings 布尔 有警告时是否视为成功 false
allow_failures 布尔 测试失败时是否视为成功 false
analyzer 字符串 输出解析器 "standard"
env.XXX 字符串 设置环境变量
background 布尔 是否在后台运行 true
on_change_strategy 字符串 代码变化时的策略:wait_then_restart/kill_then_restart
on_success 字符串 设置环境变量
ignore 数组 忽略的文件 glob 模式 \[\]
apply_gitignore 布尔 是否遵守 .gitignore 规则 true

完整的配置项与更详细的说明可以到官方文档中查看。

在配置文件中的最后是 keybindings 项,用于绑定快捷键:

toml 复制代码
[keybindings]
# alt-m = "job:my-job"
c = "job:clippy-all" # comment this to have 'c' run clippy on only the default target
p = "job:pedantic" 

配置完成后,你就可以在 Bacon 终端中用这些快捷键了,更详细的说明还是建议你去看官方文档中查看。

进阶学习

Bacon 这个自动化工具其实并不复杂,文档内容其实没那么多,所以最好的进阶学习方式其实就是多看官方文档。

第二个方式就是多使用帮助信息,还记得 Bacon 终端底部那行文字信息吗?

plaintext 复制代码
Hit / to search, ? for help, w to not wrap lines, q to quit

也就是说,当我们遇到不懂的东西时,还可以键入 ? 获取帮助,如下所示:

结语

至此,你已经明白 Bacon 是什么、能做什么了。Bacon 很简单,能有效的解决 Rust 开发中那些繁琐的重复操作,能大大提高我们的开发幸福度,赶紧在你的项目中尝试下吧。

相关推荐
郭小李20 小时前
spring 中的 @EnableWebMvc注解和WebMvcConfigurer接口
java·后端·spring
卷无止境20 小时前
Skill 的安全边界在哪里:风险来源、验证思路与用户可用的防线
后端·python
星核0penstarry21 小时前
企业 API 向后兼容实战:版本控制、废弃字段通知与灰度发布策略
人工智能·后端·api·接口隔离原则·版本控制·架构设计·后端架构
用户别睡觉21 小时前
自己搭的中文 PDF RAG 接了 Redis 缓存、跑了 RAGAS,以为能写“提速多少、准确率多少”,结果两个都没按预期来。
后端
西风测评21 小时前
终端粘贴原理:bracketed paste、4095 字节行限制与 UTF-8 分片
rust
彭亚川Allen21 小时前
985 在职研究生到底怎么样?是不是水硕?是不是.....?
前端·后端·程序员
乘风24821 小时前
# 我做了个会遗忘的 AI 记忆,召回率反而从 8% 涨到 100%
后端
Rain的Java大神之路1 天前
面试被LeetCode 27(移除元素)问懵?别再用两层 for 循环了:一道“简单题”吃透双指针原地删除,附面试加分话术 + 11 个避坑清单
后端·leetcode·面试
利威尔xu1 天前
Go IM 源码实战(11):token 只是个 HASH,多端互踢的顺序错了就踢错人
后端·微服务·面试·架构·golang
猿究院--Cu-Sn合金1 天前
Spring Boot + DeepSeek 求职 Agent 实践:工具注册、多轮调用与简历 JD 对比
数据库·人工智能·spring boot·后端·deepseek