【边编码,边更新】命令行工具 Bra 介绍
前言
Bra(Brilliant Ridiculous Assistant)是一个个人维护的命令行工具项目。它能让开发者在编写代码的同时,实时编译、更新、加载 golang 代码,从而即时地看到新代码产生的效果。Bra 极大地提高了开发效率,非常适合 Go Web 后端开发。Grafana 项目就使用了该工具。Bra 项目地址:https://github.com/unknwon/bra
使用示例
本示例演示一个简单 Web 应用。该应用在浏览器上打印 Hello World。当我们通过修改打印信息代码时,Bra 工具会触发重启,便可在浏览器上查看到代码最新效果。
package main
import (
"io"
"log"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, _ *http.Request) {
io.WriteString(w, "Hello World!")
})
log.Fatal(http.ListenAndServe(":8080", nil))
}
接下来,我们应让 Bra 工具来启动上面的 Web 应用。这需要执行 Bra 二进制程序的 run 命令,以及配置 .bra.toml 文件(该文件是 Bra 依赖的配置文件)。配置 .bra.toml 文件中定义了一些规则包括:启动程序的命令、需要监控变化的文件夹路径、可忽略的无须监控的文件名等。示例使用的 .bra.toml 如下:
[run]
init_cmds = [ # 启动时执行的命令
["go", "build", "-o=server", "main.go"],
["./server"]
]
watch_all = true # 是否监控子目录
watch_dirs = [] # 需要监控的目录
watch_exts = [".go"] # 需要监控文件的扩展名
env_files = [] # 载入环境变量
ignore = [".git", "node_modules"] # 忽略的文件目录
ignore_files = [] # 忽略的文件名
follow_symlinks = false # 是否考虑软连接
build_delay = 1500 # 为避免重复触发命令执行,两次触发事件的最小时间间隔(毫秒)
interrupt_timout = 15 # 超时终止
graceful_kill = false # 是否优雅退出
cmds = [ # 触发时执行的命令
["go", "build", "-o=server", "main.go"],
["./server"]
]
然后,准备 bra 二进制程序,可以通过如下命令构建:
go mod init
go build -o bra github.com/unknwon/bra
最终,示例代码项目结构如下。你可以通过 ./bra run
来运行配置文件中声明的命令,启动 Web 应用,修改打印信息,查看效果 http://localhost:8080。
.
├── bra
├── go.mod
├── go.sum
└── main.go
配置文件
配置文件 .bra.toml 支持一些内置变量,如 $WORKDIR 可用于 watch_dirs 中。
总结
Bra 工具很实用,但也有局限性。相关能力限制可查看 issue,比如不能并行执行多个进程,像上面实例中,你不能启动 Web 应用的同时,打印 echo。