Funzzy,你的代码监控与执行的得力助手

文摘   2024-08-01 09:34   江苏  

前言:

在快节奏的软件开发世界中,效率和自动化是成功的关键。想象一下,一个工具能够实时监控你的代码变化,并自动执行预设的命令,这将大大提升你的开发效率。今天,我们将介绍一个名为 Funzzy 的轻量级监视器,它不仅能够实现这一愿景,而且操作简便、功能强大,是每个开发者梦寐以求的自动化伙伴。

funzzy (fzz)

一个受 antr[1]entr[2] 启发的轻量级监视器。同时参见:funzzy.nvim[3]

使用语义化的 YAML 和 Unix shell 风格的模式匹配 或标准输入来配置不同命令的自动执行。

例如,一个简单的工作流程可以是:

find . -name '*.ts' | funzzy 'npx eslint .'

或者更复杂的工作流程,如:

# .watch.yaml (或 .watch.yml)
# 在这里列出所有事件及其应执行的命令
# 提示:将 '.watch.yaml' 包含在 .git/info/exclude 中以忽略它。
# 提示2:为了更好的工作流程,将任务/步骤从快到慢列出
#
# 运行:`fzz --fail-fast --non-block` (`fzz -nb`) 来启动此工作流程(最小版本:v1.4.0)

- name: 运行我的测试
  run: make test
  change: "tests/**"
  ignore: "tests/integration/**"
  run_on_init: true

- name: 星球大战 ASCII 艺术
  run: telnet towel.blinkenlights.nl
  change:
    - "/tmp/starwars.txt"
    - ".watch.yaml"

# 自定义脚本的命令模板
- name: 为单个文件运行测试和 linter
  run:
   - "npm run lint -- {{filepath}}",
   - "npm test -- $(echo '{{filepath}}' | sed -r s/.(j|t)sx?//)"
  change: ["src/**", "libs/**"]
  ignore: ["src/**/*.stories.*", "libs/**/*.log"]

- name: 最后在 git 中暂存更改的文件
  run:
    - git add {{relative_path}}
    - git commit
  change:
    - "src/**"
    - "tests/**"
  ignore: "**/*.log"

想要更多示例?

  • 查看 funzzy 中的工作流程[4]
  • 查看示例文件夹[5]

动机

创建一个轻量级的监视器,允许我设置具有特定自动化检查和步骤的个人本地工作流程,类似于 GitHub Actions。 Funzzy 用 Rust 构建,使其速度极快且轻量。

安装

OSX:

brew tap cristianoliveira/tap
brew update
brew install funzzy

Linux:

curl -s https://raw.githubusercontent.com/cristianoliveira/funzzy/master/linux-install.sh | sh

您可以指定版本:

curl -s https://raw.githubusercontent.com/cristianoliveira/funzzy/master/linux-install.sh | bash - 1.0.0

Nix

nix-env -iA nixpkgs.funzzy

夜间版本

nix profile install 'github:cristianoliveira/funzzy#funzzy'
# 或
nix profile install 'github:cristianoliveira/nixpkgs#funzzy'

或者,如果您使用 shell.nix:

{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell {
buildInputs = [
pkgs.funzzy
];
};

使用 Cargo

cargo install funzzy

*确保您的 PATH 包含 $HOME/.cargo/binexport PATH=$HOME/.cargo/bin:$PATH

  • 从源代码

确保您已安装以下依赖:

  • Rust
  • Cargo

执行:

cargo install --git https://github.com/cristianoliveira/funzzy.git

或者,克隆此仓库并运行:

make install

运行

使用样板初始化:

funzzy init

根据您的需要更改配置文件 .watch.yaml。然后运行:

funzzy
# 或使用简短版本
fzz

选项

使用 fzz --help 查看所有选项

使用不同的配置文件:

fzz -c ~/watch.yaml

快速失败,如果任何任务失败则终止执行。对于依赖所有任务成功的工作流程非常有用。查看我们的工作流程中的用法[6]

fzz --fail-fast # 或 fzz -b (bail)

按目标过滤任务。

fzz -t "@quick"
# 假设您有一个或多个任务名称中包含 `@quick`,它将只加载这些任务

使用一些任意命令和标准输入运行

find . -name '*.rs' | fzz 'cargo build'

组合命令的模板

find . -name '*.[jt]s' | fzz 'npx eslint {{filepath}}'

以“非阻塞”模式运行,当有新的文件更改事件时取消当前正在运行的任务。 这在工作流程包含长时间运行的任务时非常有用。在长任务测试中查看更多[7]

fzz --non-block # 或 fzz -n

故障排除

为什么监视器多次运行相同的任务?

这可能是由于不同的原因,最常见的问题是使用 VIM 时,其默认的备份设置会在保存时导致多个文件更改。(参见 为什么 Vim 保存文件时会使用 ~ 扩展名?[8])。 对于这种情况,要么禁用备份,要么在您的监视规则中忽略它们[9]

对于其他情况,使用详细模式 fzz -V | grep 'Triggered by' 来理解是什么触发了任务的执行。

自动化测试

运行单元测试:

cargo test

或简单的 make tests

运行集成测试:

make integration

代码风格

我们使用 rustfmt 来格式化代码。要格式化代码,请运行:

cargo fmt

贡献

  • Fork 它!
  • 创建您的功能分支:git checkout -b my-new-feature
  • 提交您的更改:git commit -am 'Add some feature'
  • 推送到分支:git push origin my-new-feature
  • 提交一个 pull request

想要帮忙?

  • 提交 pull requests
  • 创建 Issues
  • 报告错误
  • 建议新功能或增强功能

任何帮助都是受欢迎的!

Pull Request 应该有单元测试

许可证

本项目在 MIT 许可证下创建。

结语:

Funzzy 以其简洁的配置、灵活的命令执行和对复杂工作流程的完美支持,成为了开发者提升生产力的利器。无论是简单的文件查找还是复杂的工作流程,Funzzy 都能轻松应对。加入 Funzzy 的行列,让你的代码开发之旅更加顺畅,释放你的创造力,专注于构建伟大的产品。

参考资料
[1]

antr: https://github.com/juanibiapina/antr

[2]

entr: https://github.com/eradman/entr

[3]

funzzy.nvim: https://github.com/cristianoliveira/funzzy.nvim

[4]

查看 funzzy 中的工作流程: https://github.com/cristianoliveira/funzzy/blob/master/.watch.yaml#L6

[5]

查看示例文件夹: https://github.com/cristianoliveira/funzzy/tree/master/examples

[6]

查看我们的工作流程中的用法: https://github.com/cristianoliveira/funzzy/blob/master/.watch.yaml#L6

[7]

在长任务测试中查看更多: https://github.com/cristianoliveira/funzzy/blob/master/tests/watching_with_non_block_flag.rs#L7

[8]

为什么 Vim 保存文件时会使用 ~ 扩展名?: https://stackoverflow.com/questions/607435/why-does-vim-save-files-with-a-extension/607474#607474

[9]

在您的监视规则中忽略它们: https://github.com/cristianoliveira/funzzy/blob/master/examples/tasks-with-long-running-commands.yaml#L5


编程悟道
自制软件研发、软件商店,全栈,ARTS 、架构,模型,原生系统,后端(Node、React)以及跨平台技术(Flutter、RN).vue.js react.js next.js express koa hapi uniapp Astro
 最新文章