这个是做什么用的?
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/