使用fswatch工具進行golang的熱編譯

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

這個是做什麼用的?

fswatch是一個工具, 通過檢測檔案的變化,並觸發指定的命令

為什麼需要fswatch

寫完代碼最重要的事情之一, 就是檢測一下寫好的代碼是不是能夠工作. 要早提前做的話, 收效越好, 發現的問題越多. 但是如果每次都需要make test, 每次都去編譯或者測試的話, 還是挺煩人的. 所以如果能有一個自動化的工具去做的話, 那將是件很爽的事情.

最近我在忙一個項目, 經常性的需要, 停下來, 編譯一下代碼,看看能不能work. 真是煩死人了. 於是我就寫了fswatch這個工具, 但是這種東西, 在我寫第一版的時候寫的不太好, 易用性太差, 可悲的是我卻不知怎麼去改進. 有人14個人star過我的這個小項目, 但我總感覺對不起他們. 真恨不得某一天刪掉這麼一坨shit的代碼.

事情在某一天終於有了轉機, 周末我研究了下sublime text2. 我過去只是聽說它但沒有真正的用過. sublime text2 有很多的設定檔(json格式的), 你只需要配置好, 就可以萬事大吉了. 把配置拷貝到其他電腦上, 也能很好的work. 看來設定檔真是個好東西啊.

曾有人fork了我的那個fswatch工具, 把fswatch改成一個設定檔的方式, 但是改的很簡單, 當時我沒有在意. 但現在看來,設定檔的方式真的很nice, 你只需要在項目下建立一個.fswatch.json的設定檔, 進行一次參數的調整. 以後只需要運行fswatch就可以了. 多麼簡單的一個道理,理解起來去花了這麼久.

於是邊想邊做, 想通的當天晚上就將原來代碼中將近80%的垃圾代碼清理了, 只留下20%的核心, 然後加上了設定檔產生和載入的代碼, 將原來重啟程式時的kill改成的group-kill. 很不幸的是 目前group-kill只能在mac和linux上跑的很好, 我暫時也沒想到神馬好的辦法, 能讓他在win上也ok運行.

目前拿這個fswatch替代bee, 即時的去編譯運行c,cpp,java,golang等等, 應該都不是問題. 但是和bee比有什麼優勢呢?

既然大神問了,我就列舉下:

  1. bee只適合Go語言; 而fswatch可以適用各種語言, 甚至是檔案的遠程同步
  2. bee可以通過配置指定監控的檔案夾; fswatch可以配置監控的檔案夾並指定監控的深度(0代表目前的目錄)
  3. bee可以指定監控檔案的尾碼; fswatch支援使用Regex, 來過濾監控到的檔案.
  4. bee.json需要重其他地方拷貝;但是fswatch.json可以自動產生出來.
  5. fswatch支援group-kill. 這樣可以確保fswatch停止後,不會有垃圾進程的存在.
  6. fswatch會根據程式的已耗用時間自動判斷, 是否為服務端程式, 並適當的修改重啟策略.
  7. bee功能龐大; fswatch的代碼精簡.

上手使用

設定檔比較長, 但是可以用fswatch自動去產生. fswatch 直接運行這個命令就可以. 然後你會在目錄下面發下一個.fswatch.json檔案. 內容大致如下(下面是個golang程式的設定檔).

{    "paths": ["."],    "depth": 2,    "exclude": [],    "include": ["\\.go$"],    "command": [        "bash", "-c", "go build && ./gogs web"    ],    "env": {        "POWERED_BY": "github.com/codeskyblue/fswatch"    }}

paths只需要監控那些目錄。一般.fswatch檔案是和代碼放在一起的,所以監控目錄寫.就可以了。
其中exclude是不想監控的檔案, include是打算監控的檔案. 如果include為空白的話, 那就是所有檔案都監控. 一般C,Cpp的配置寫成

"include": ["\\.c$", "\\.cpp", "\\.h"]

這個樣子就可以了.
python的可以把設定檔寫成

"paths": ["."],"include": ["\\.py$""],"env": {     "PYTHONPATH": "$HOME/pylib"},"command": ["pyhon", "main.py"],

golang的可以寫成

"paths": [    "$GOPATH/src/github.com/dependicy1",    "."],"include": ["\\.go$"],"command": ["bash", "-c", "go build && ./app"]

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

其他語言的請各自發揮想象了, 項目地址的首頁是 https://github.com/codeskyblue/fswatch

安裝方法

go get github.com/codeskyblue/fswatch

運行起來還是挺不錯的, 截個圖貼在了下面

mac上如果遇到提示說, 檔案開啟過多. 簡單的修改下就好使了. 具體參考http://ronglei0324.blog.163.com/blog/static/676332232013122112049188/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.