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/