使用fswatch工具进行golang的热编译

前端之家收集整理的这篇文章主要介绍了使用fswatch工具进行golang的热编译前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

这个是做什么用的?

fswatch是一个工具,通过检测文件的变化,并触发指定的命令

为什么需要fswatch

写完代码最重要的事情之一,就是检测一下写好的代码是不是能够工作. 要早提前做的话,收效越好,发现的问题越多. 但是如果每次都需要make test,每次都去编译或者测试的话,还是挺烦人的. 所以如果能有一个自动化的工具去做的话,那将是件很爽的事情.

最近我在忙一个项目,经常性的需要,停下来,编译一下代码,看看能不能work. 真是烦死人了. 于是我就写了fswatch这个工具,但是这种东西,在我写第一版的时候写的不太好,易用性太差,可悲的是我却不知怎么去改进. 有人14个人star过我的这个小项目,但我总感觉对不起他们. 真恨不得某一天删掉这么一坨shit的代码.

事情在某一天终于有了转机,周末我研究了下sublime text2. 我过去只是听说它但没有真正的用过. sublime text2 有很多的配置文件(json格式的),你只需要配置好,就可以万事大吉了. 把配置拷贝到其他电脑上,也能很好的work. 看来配置文件真是个好东西啊.

曾有人fork了我的那个fswatch工具,把fswatch改成一个配置文件的方式,但是改的很简单,当时我没有在意. 但现在看来,配置文件的方式真的很nice,你只需要在项目下建立一个.fsw.yml配置文件,进行一次参数的调整. 以后只需要运行fswatch就可以了. 多么简单的一个道理,理解起来去花了这么久.

于是边想边做,想通的当天晚上就将原来代码中将近80%的垃圾代码清理了,只留下20%的核心,然后加上配置文件生成和加载的代码,将原来重启程序时的kill改成的group kill. 很不幸的是 目前group-kill只能在mac和linux上跑的很好,我暂时也没想到神马好的办法,能让他在win上也ok运行. (2016年win也支持了)

目前拿这个fswatch替代bee,实时的去编译运行c,cpp,java,golang等等,应该都不是问题. 但是和bee比有什么优势呢?

既然大神问了,我就列举下:

  1. bee只适合Go语言; 而fswatch可以适用各种语言,甚至是文件的远程同步
  2. bee可以通过配置指定监控的文件夹; fswatch可以配置监控的文件夹并指定监控的深度(0代表当前目录)
  3. bee可以指定监控文件的后缀; fswatch支持使用正则表达式,来过滤监控到的文件.
  4. bee.json需要重其他地方拷贝;但是.fsw.yml可以自动生成出来.
  5. fswatch支持group kill. 这样可以确保fswatch停止后,不会有垃圾进程的存在.
  6. fswatch会根据程序的运行时间自动判断,是否为服务端程序,并适当的修改重启策略.
  7. bee功能庞大; fswatch的代码精简.

上手使用

配置文件比较长,但是可以用fswatch自动生成. fswatch init 直接运行这个命令就可以. 然后你会在目录下面发下一个.fswatch.json文件. 内容大致如下(下面是个golang程序的配置文件).

desc: Auto generated by fswatch [fswatch]
triggers:
- pattens:
  - '**/*.go'
  # also support '!**/test_*.go'
  env:
    DEBUG: "1"
  # if shell is true,$cmd will be wrapped with `bash -c`
  shell: true
  cmd: go test -v
  delay: 100ms
  signal: "KILL"
watch_paths:
- .
watch_depth: 5

watch_paths只需要监控那些目录。一般.fsw.yml文件是和代码放在一起的,所以监控目录写.就可以了。 其中pattens是想监控的文件,如果需要监控go,但是需要过滤掉test_*.go文件,只需要写

- pattens:
  - '**/*.go'
  - '!**/test_*.go'

这个样子就可以了.

配置也可以简单一些,python的可以把配置文件写成

desc: Auto generated by fswatch [fswatch]
triggers:
- pattens:
  - '**/*.py'
  cmd: python main.py
  signal: "KILL"

golang的可以写成

desc: Auto generated by fswatch [fswatch]
triggers:
- pattens:
  - '**/*.py'
  shell: true
  cmd: go build && ./app
  signal: "KILL"

java的(唉,我java不熟,就不写了吧)

其他语言的请各自发挥想象了,项目地址的主页是 https://github.com/codeskyblue/fswatch

安装方法

go get -u -v github.com/codeskyblue/fswatch

运行起来还是挺不错的,截个图贴在了下面

mac上如果遇到提示说,文件打开过多. 简单的修改下就好使了. 具体参考http://ronglei0324.blog.163.com/blog/static/676332232013122112049188/

猜你在找的Go相关文章