fswatch是一个工具, 经过检测文件的变化,并触发指定的命令java
写完代码最重要的事情之一, 就是检测一下写好的代码是否是可以工做. 要早提早作的话, 收效越好, 发现的问题越多. 可是若是每次都须要make test, 每次都去编译或者测试的话, 仍是挺烦人的. 因此若是能有一个自动化的工具去作的话, 那将是件很爽的事情.python
最近我在忙一个项目, 常常性的须要, 停下来, 编译一下代码,看看能不能work. 真是烦死人了. 因而我就写了fswatch这个工具, 可是这种东西, 在我写初版的时候写的不太好, 易用性太差, 可悲的是我殊不知怎么去改进. 有人14我的star过个人这个小项目, 但我总感受对不起他们. 真巴不得某一天删掉这么一坨shit的代码.linux
事情在某一天终于有了起色, 周末我研究了下sublime text2. 我过去只是据说它但没有真正的用过. sublime text2 有不少的配置文件(json格式的), 你只须要配置好, 就能够万事大吉了. 把配置拷贝到其余电脑上, 也能很好的work. 看来配置文件真是个好东西啊.git
曾有人fork了个人那个fswatch工具, 把fswatch改为一个配置文件的方式, 可是改的很简单, 当时我没有在乎. 但如今看来,配置文件的方式真的很nice, 你只须要在项目下创建一个.fsw.yml
的配置文件, 进行一次参数的调整. 之后只须要运行fswatch就能够了. 多么简单的一个道理,理解起来去花了这么久.github
因而边想边作, 想通的当天晚上就将原来代码中将近80%的垃圾代码清理了, 只留下20%的核心, 而后加上了配置文件生成和加载的代码, 将原来重启程序时的kill改为的group kill. 很不幸的是 目前group-kill只能在mac和linux上跑的很好, 我暂时也没想到神马好的办法, 能让他在win上也ok运行. (2016年win也支持了)golang
目前拿这个fswatch替代bee, 实时的去编译运行c,cpp,java,golang等等, 应该都不是问题. 可是和bee比有什么优点呢?正则表达式
既然大神问了,我就列举下:shell
.fsw.yml
能够自动生成出来.配置文件比较长, 可是能够用fswatch自动去生成. fswatch init
直接运行这个命令就能够. 而后你会在目录下面发下一个.fswatch.json
文件. 内容大体以下(下面是个golang程序的配置文件).json
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
的文件,只须要写bash
- 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/