fresh一个go开发的实现热重启神器

作者: 小新

发布于 2020-01-06 | 最后更新 2020-01-06


在go开发过程中,每次修改代码后,都需要go run main.go太麻烦了,那么fresh就可以节省这一操作,代码保存后自动进行编译运行。

安装

go get github.com/pilu/fresh

使用

//进入您的项目根目录
cd /path/to/myapp
fresh

4:43:19 runner      | InitFolders
14:43:19 runner      | mkdir ./tmp
14:43:19 runner      | mkdir ./tmp: file exists
14:43:19 watcher     | Watching .
...
14:43:27 app         | [GIN-debug] Listening and serving HTTP on 127.0.0.1:8004

此时,只要保存代码后,fresh自动重启,如下

14:46:52 watcher     | sending event "main.go": MODIFY|ATTRIB
14:46:52 main        | receiving first event "main.go": MODIFY|ATTRIB
14:46:52 main        | sleeping for 6000 milliseconds
14:46:52 watcher     | sending event "main.go": MODIFY
14:46:54 watcher     | sending event "main.go": MODIFY|ATTRIB
14:46:58 main        | flushing events
14:46:58 main        | receiving event "main.go": MODIFY
14:46:58 main        | receiving event "main.go": MODIFY|ATTRIB
14:46:58 main        | Started! (38 Goroutines)
14:46:58 main        | remove tmp/runner-build-errors.log: no such file or directory
14:46:58 build       | Building...
...
[GIN-debug] Listening and serving HTTP on 127.0.0.1:8004

使用配置

fresh启动时可以使用自定义配置,例如有些静态文件是不需要热重启的,那就在ignored后面加入目录名。

fresh.conf配置文件,如下

root:              .
tmp_path:          ./tmp
build_name:        runner-build
build_log:         runner-build-errors.log
valid_ext:         .go, .tpl, .tmpl, .html
no_rebuild_ext:    .tpl, .tmpl, .html
ignored:           assets, tmp, static
build_delay:       600
colors:            1
log_color_main:    cyan
log_color_build:   yellow
log_color_runner:  green
log_color_watcher: magenta
log_color_app:

使用命令行

fresh -c fresh.conf

使用技艺

如果使用了自定义配置后,每次启动fresh时,都要写fresh -c fresh.conf,对于我这边懒人来说,不够简洁,那么我就会想怎么样更少的敲键盘,更快的启动。费了九牛二虎之力,终于想到一个方法,使用.sh来启动。 在main.go同级目录下,新建一个fresh.sh文件,内容如下:

fresh -c config/fresh.conf
echo "fresh completed"

给fresh.sh执行的权限,

chmod +x fresh.sh

好了,以后启动直接敲代码,注意前面的./不能缺少:

./fresh.sh

注意

fresh只监控了同级和下一级的文件变更,对于下二级的文件变更是不会触发热重启的。 例如:

// tree
main.go
fresh.sh
pages/page1.go
pages/home/page2.go

page1.go修改保存后会热重启。 page2.go修改保存后不会热重启。

结语

以后,就很愉快地写go代码了~~

参考

fresh 的更多设置,请参考:https://github.com/gravityblast/fresh