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

使用fswatch工具进行golang的热编译,第1张

概述这个是做什么用的? fswatch是一个工具, 通过检测文件的变化,并触发指定的命令 为什么需要fswatch 写完代码最重要的事情之一, 就是检测一下写好的代码是不是能够工作. 要早提前做的话, 收效越好, 发现的问题越多. 但是如果每次都需要make test, 每次都去编译或者测试的话, 还是挺烦人的. 所以如果能有一个自动化的工具去做的话, 那将是件很爽的事情. 最近我在忙一个项目, 经常 这个是做什么用的?

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比有什么优势呢?

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

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

总结

以上是内存溢出为你收集整理的使用fswatch工具进行golang的热编译全部内容,希望文章能够帮你解决使用fswatch工具进行golang的热编译所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1291800.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存