fileboy文件變更監(jiān)聽通知系統(tǒng)
fileboy 是一個文件變更監(jiān)聽通知系統(tǒng),使用 Go 編寫。
適用于 Hot Reload (典型的如開發(fā)go項目,無需每次手動執(zhí)行 go build;又比如前端 node 打包) 或者 系統(tǒng)監(jiān)控的場景。
特性
- 極簡的用法和配置
- 支持多平臺,Windows/Linux/MacOS
- 支持自定義文件監(jiān)聽范圍,監(jiān)聽指定文件夾/不監(jiān)聽指定文件夾/指定后綴文件
- 支持自定義監(jiān)控事件(write/rename/remove/create/chmod)
- 支持設(shè)置多條命令
- 命令支持變量占位符
- 支持冗余任務(wù)丟棄,自定義冗余任務(wù)范圍
- 支持 http 通知
- 更多...
編譯環(huán)境
go version 1.13
更新日志
運行
下載二進(jìn)制文件
Github: download v1.12
Gitee: dowmload v1.12
下載已經(jīng)編譯好的對應(yīng)平臺二進(jìn)制文件,重命名為fileboy, 加入系統(tǒng) Path 中即可。
源碼編譯
clone 該項目,進(jìn)入主目錄,運行命令:
## 安裝依賴 go get -u gopkg.in/fsnotify/fsnotify.v1 go get -u gopkg.in/yaml.v2 ## 編譯 go build ## 運行 ./fileboy
使用
fileboy 的正常運行依賴于 filegirl.yaml 配置文件,因此首次在項目中使用需要初始化 filegirl.yaml。
- 進(jìn)入你想要 hot reload 的項目主目錄下;
- 運行
fileboy init,會在該目錄下生成filegirl.yaml文件; - 查看
filegirl.yaml,修改為適合自己項目的配置項; - 運行
fileboy即可.
如果你定義了 command -> exec命令,想事先確認(rèn)是否能正常執(zhí)行,可以運行 fileboy exec命令,系統(tǒng)會嘗試運行你的自定義命令。
你可以使用 fileboy help查看使用幫助。
filegirl.yaml 配置文件說明
# 主配置
core:
# 配置版本號
version: 1
# 監(jiān)控配置
monitor:
# 要監(jiān)聽的目錄
# test1 監(jiān)聽當(dāng)前目錄下 test1 目錄
# test1/test2 監(jiān)聽當(dāng)前目錄下 test1/test2 目錄
# test1,* 監(jiān)聽當(dāng)前目錄下 test1 目錄及其所有子目錄(遞歸)
# .,* 監(jiān)聽當(dāng)前目錄及其所有子目錄(遞歸)
includeDirs:
- .,*
# 不監(jiān)聽的目錄
# .idea 忽略.idea目錄及其所有子目錄的監(jiān)聽
exceptDirs:
- .idea
- .git
- .vscode
- node_modules
- vendor
# 監(jiān)聽文件的格式,此類文件更改會執(zhí)行 command 中的命令
# .go 后綴為 .go 的文件更改,會執(zhí)行 command 中的命令
# .* 所有的文件更改都會執(zhí)行 command 中的命令
types:
- .go
# 監(jiān)聽的事件類型,發(fā)生此類事件才執(zhí)行 command 中的命令
# 沒有該配置默認(rèn)監(jiān)聽所有事件
# write 寫入文件事件
# rename 重命名文件事件
# remove 移除文件事件
# create 創(chuàng)建文件事件
# chmod 更新文件權(quán)限事件(類unix)
events:
- write
- rename
- remove
- create
- chmod
# 命令
command:
# 監(jiān)聽的文件有更改會執(zhí)行的命令
# 可以有多條命令,會依次執(zhí)行
# 如有多條命令,每條命令都會等待上一條命令執(zhí)行完畢后才會執(zhí)行
# 如遇交互式命令,允許外部獲取輸入
# 支持變量占位符,運行命令時會替換成實際值:
# {{file}} 文件名(如 a.txt 、test/test2/a.go)
# {{ext}} 文件后綴(如 .go)
# {{event}} 事件(上面的events, 如 write)
# {{changed}} 文件更新的本地時間戳(納秒,如 1537326690523046400)
# 變量占位符使用示例:cp {{file}} /root/sync -rf 、 myCommand --{{ext}} {{changed}}
exec:
- go version
- go env
# 文件變更后命令在xx毫秒后才會執(zhí)行,單位為毫秒
# 一個變更事件(A)如果在定義的延遲時間(t)內(nèi),又有新的文件變更事件(B),那么A會取消執(zhí)行。
# B及以后的事件均依次類推,直到事件Z在t內(nèi)沒有新事件產(chǎn)生,Z 會執(zhí)行
# 合理設(shè)置延遲時間,將有效減少冗余和重復(fù)任務(wù)的執(zhí)行
# 如果不需要該特性,設(shè)置為 0
delayMillSecond: 2000
# 通知器
notifier:
# 文件更改會向該 url 發(fā)送請求(POST 一段 json 文本數(shù)據(jù))
# 觸發(fā)請求的時機(jī)和執(zhí)行 command 命令是一致的
# 請求超時 15 秒
# POST 格式:
# Content-Type: application/json;charset=UTF-8
# User-Agent: FileBoy Net Notifier v1.12
# Body: {"project_folder":"/project/path","file":"main.go","changed":1576567861913824940,"ext":".go","event":"write"}
# 例: http://example.com/notifier/fileboy-listener
# 不啟用通知,請留空 ""
callUrl: ""
TODO
- 命令支持變量占位符
- 支持多命令
- 支持監(jiān)聽指定文件夾
- 支持不監(jiān)聽指定文件夾
- 支持監(jiān)聽指定后綴文件
- 支持自定事件監(jiān)聽
- 支持 http 通知
- 支持冗余任務(wù)丟棄
- 支持 http 合并任務(wù)的通知
評論
圖片
表情
