改了代码还要手动重跑命令?这个 Rust 工具帮你盯着文件变化
改了代码还要手动重跑命令?这个 Rust 工具帮你盯着文件变化

写代码的日常:改几行,Alt+Tab 切终端,按上箭头,回车,等结果。再改几行,Alt+Tab 切终端,按上箭头,回车……
一天下来,这个循环重复几十上百次,思路被切得稀碎。
有没有办法让机器自己盯着文件变化,变化了就自动跑命令?
watchexec 干的正是这件事。一个用 Rust 写的命令行工具,专门监控文件变动,自动触发你指定的命令。目前在 GitHub 上拿到近 7000 个 Star。

怎么用
两条命令就能说清楚。
前端项目,监控 JS、CSS、HTML 文件变化,自动执行构建:
watchexec -e js,css,html npm run build
Python 项目,改了 .py 文件自动重启服务:
watchexec -r -e py -- python server.py
-e 指定监控的文件扩展名,-r 表示先杀掉旧进程再启动新的,-- 后面是你想执行的命令和参数。
它还会把触发变更的文件路径写入环境变量和 STDIN,你可以在被执行的命令里拿到具体哪些文件变了,做更精细的处理。
几个实用的设计
事件合并。 很多编辑器保存文件时会先写临时文件再重命名,这个过程产生多个文件系统事件。watchexec 会把短时间内的连续事件合并成一次触发,避免命令被重复执行好几遍。比如你用 vim 保存一个文件,底层可能触发 3 到 4 个事件,但 watchexec 只会执行一次命令。
自动读取 ignore 文件。 项目里的 .gitignore 和 .ignore 会被自动加载,node_modules、target、__pycache__ 这类目录自动跳过,不用单独配置排除规则。
跨平台。 macOS、Linux、Windows 都可以跑,行为完全一致。你在 Mac 上配好的命令,放到 Linux 服务器上同样能用。
进程组管理。 你执行的命令如果 fork 了子进程,watchexec 能追踪整个进程组。重启时不会留下僵尸进程,这一点在跑开发服务器时很重要。
零依赖。 不绑定任何语言生态。不是 npm 包,不是 pip 包,一个独立的二进制文件,拷贝到任意机器上就能跑。
怎么装
安装渠道很多:
- 各系统的包管理器基本都收录了:Homebrew、Scoop、Chocolatey、Arch、Debian、Nix
- Cargo 从源码装:
cargo install --locked watchexec-cli - 直接下载预编译的二进制文件
不止于监听文件
watchexec 周边有一些项目值得关注:
- checkexec:只在源文件比目标文件新时才执行命令,适合增量构建场景
- systemfd:开发环境中做 socket 转发,和 watchexec 搭配使用
- cargo watch:Rust/Cargo 项目定制的 watcher
- clearscreen:跨平台清屏工具
还有一些知名项目直接基于 watchexec 构建:cargo-lambda(AWS Lambda Rust 开发工具)、devenv.sh(Nix 开发环境管理)、ghciwatch(Haskell 项目 watcher)、dotter(dotfile 管理器)。这么多下游项目在使用它的库,说明核心的监听和执行机制经过了实际验证。
一句话总结
如果你每天在终端里反复敲同样的命令,可以试试 watchexec。一条命令配好,文件改了自动跑,不用手动切来切去。没有配置文件、不需要学习成本,下载即用。
反复敲同样的命令,可以试试 watchexec。一条命令配好,文件改了自动跑,不用手动切来切去。没有配置文件、不需要学习成本,下载即用。
更多推荐
所有评论(0)