在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:fileboy开源软件地址:https://gitee.com/dengsgo/fileboy开源软件介绍:项目说明fileboy,文件变更监听通知工具,使用 Go 编写。 特性
编译环境Go >= 1.13 更新日志运行下载二进制文件Github: download v1.15 下载已经编译好的对应平台二进制文件,重命名为 源码编译clone 该项目,进入主目录,运行命令: ## 确保本地 Go 启用 modules export GO111MODULE=on go env -w GOPROXY=https://goproxy.io,direct## 安装依赖go get -u ## 编译go build## 运行./fileboy 使用fileboy 的正常运行依赖于
如果你定义了 filegirl.yaml 配置文件说明###################### 运行 fileboy 所在的路径为工作目录;## 使用 -filegirl 命令参数可以加载指定路径的 filegirl 配置(不限定工作目录),如 "fileboy -filegirl /user/f/go.yml" 或者 "fileboy -filegirl ../../f/go.yml";##################### 主配置core: # 配置版本号 version: 1# 监控配置monitor: # 要监听的目录。必须是工作目录下的路径 # test1 监听当前目录下 test1 目录 # test1/test2 监听当前目录下 test1/test2 目录 # test1,* 监听当前目录下 test1 目录及其所有子目录(递归) # .,* 监听当前目录及其所有子目录(递归) includeDirs: - .,* # 不监听的目录。必须是工作目录下的路径 # .idea 忽略.idea目录及其所有子目录的监听 exceptDirs: - .idea - .git - .vscode - node_modules - vendor # 监听文件的格式,此类文件更改会执行 command 中的命令 # .go 后缀为 .go 的文件更改,会执行 command 中的命令 # .* 所有的文件更改都会执行 command 中的命令 types: - .go # 监听的事件类型,发生此类事件才执行 command 中的命令 # 没有该配置默认监听所有事件 # write 写入文件事件 # rename 重命名文件事件 # remove 移除文件事件 # create 创建文件事件 # chmod 更新文件权限事件(类unix) events: - write - rename - remove - create - chmod# 命令command: # 监听的文件有更改会执行的命令 # 可以有多条命令,会依次执行 # 如有多条命令,每条命令都会等待上一条命令执行完毕后才会执行 # 如遇交互式命令,允许外部获取输入 # 支持变量占位符,运行命令时会替换成实际值: # {{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毫秒后才会执行,单位为毫秒 # 一个变更事件(A)如果在定义的延迟时间(t)内, 又有新的文件变更事件(B), 那么A会取消执行。 # B及以后的事件均依次类推,直到事件Z在t内没有新事件产生,Z 会执行 # 合理设置延迟时间,将有效减少冗余和重复任务的执行 # 如果不需要该特性,设置为 0 delayMillSecond: 2000# 通知器notifier: # 文件更改会向该 url 发送请求(POST 一段 json 文本数据) # 触发请求的时机和执行 command 命令是一致的 # 请求超时 15 秒 # POST 格式: # Content-Type: application/json;charset=UTF-8 # User-Agent: FileBoy Net Notifier v1.16 # Body: {"project_folder":"/project/path","file":"main.go","changed":1576567861913824940,"ext":".go","event":"write"} # 例: http://example.com/notifier/fileboy-listener # 不启用通知,请留空 "" callUrl: ""# 特殊指令instruction: # 可以通过特殊的指令选项来控制 command 的行为,指令可以有多个 # 指令选项解释: # exec-when-start fileboy启动就绪后,自动执行一次 'exec' 定义的命令 # should-finish 触发执行 'exec' 时(C),如果上一次的命令(L)未退出(还在执行),会等待 L 退出(而不是强制 kill ),直到 L 有明确 exit code 才会开始执行本次命令。 # 在等待 L 退出时,又有新事件触发了命令执行(N),则 C 执行取消,只会保留最后一次的 N 执行 # ignore-stdout 执行 'exec' 产生的 stdout 会被丢弃 # ignore-warn fileboy 自身的 warn 信息会被丢弃 # ignore-info fileboy 自身的 info 信息会被丢弃 # ignore-exec-error 执行 'exec' 出错仍继续执行下面的命令而不退出 #- should-finish #- exec-when-start - ignore-warn QA很多框架都自带了 hot reload 的功能,为什么还要单独写个 fileboy 呢?这个是一款通用的 hot reload 的软件,理论上适用于任何需要 hot reload 的场景,并不局限于语言层面上。只要灵活的配置 fileboy 可以应用在那些具体的场景?在开发中,我们很需要一款可以帮助我们自动打包编译的工具,那 fileboy 就非常适合这样的场景。比如 go 项目的热编译,让我们可以边修改代码边运行得到反馈。又比如 PHP Swoole 框架,由于常驻进程的原因,无法更改代码立即reload,使用 fileboy 就可以辅助做到传统 PHP 开发的体验。 通知器在什么时候会发送 http 请求 ?通知器发送 http 通知的前提是在配置文件中设置了 idea 下更改文件,为什么会执行两次或者多次 command ?由于 idea 系列软件特殊的文件保存策略,他会自动创建一些临时文件,并且在需要时多次重写文件,所以有时反映在文件上就是有多次的更改,所以会出现这种情况。1.5之后的版本增加了 filegirl.yaml 里面的 command 如何配置复杂命令?fileboy 目前支持 为什么起名为 fileboy,又把配置名叫做 filegirl ?因为爱情~~ (◡ᴗ◡✿) 贡献者感谢支持 |
请发表评论