前言:
在快节奏的软件开发世界中,效率和自动化是成功的关键。想象一下,一个工具能够实时监控你的代码变化,并自动执行预设的命令,这将大大提升你的开发效率。今天,我们将介绍一个名为 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/bin
export 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 的行列,让你的代码开发之旅更加顺畅,释放你的创造力,专注于构建伟大的产品。
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