7 个版本
0.2.3 | 2024 年 2 月 6 日 |
---|---|
0.2.2 | 2024 年 2 月 6 日 |
0.2.1 | 2023 年 10 月 17 日 |
0.1.6 | 2022 年 12 月 5 日 |
0.1.1 | 2022 年 2 月 14 日 |
413 在 开发工具 中排名
每月 下载次数 99
在 3 个 crate 中使用(通过 xtask-wasm)
25KB
361 行
xtask-watch
此 crate 提供了一个 Watch
结构体,用于启动给定的命令,并在检测到源代码中的更改时重新启动命令。
此 Watch
结构体旨在与 xtask 概念 一起使用,并实现了 clap::Parser
,因此可以轻松地在您的 xtask crate 中使用。有关如何扩展它的信息,请参阅 clap 的 flatten
。
设置
将 xtask-watch 添加到项目的最佳方式是创建一个包含两个包的工作空间:您的项目包和 xtask 包。
使用 xtask 创建项目
-
创建一个新目录,该目录将包含您的项目的两个包和工作空间的
Cargo.toml
。mkdir my-project cd my-project touch Cargo.toml
-
使用
cargo new
创建项目包和 xtask 包cargo new my-project cargo new xtask
-
打开工作空间中的 Cargo.toml 并添加以下内容
[workspace] members = [ "my-project", "xtask", ]
-
创建一个
.cargo/config.toml
文件并添加以下内容[alias] xtask = "run --package xtask --"
目录结构应如下所示
my-project
├── .cargo
│ └── config.toml
├── Cargo.toml
├── my-project
│ ├── Cargo.toml
│ └── src
│ └── ...
└── xtask
├── Cargo.toml
└── src
└── main.rs
现在您可以使用以下命令运行您的 xtask 包
cargo xtask
有关 xtask 的更多信息,请参阅 此处。
将 xtask-watch 作为依赖项使用
最后,将以下内容添加到 xtask 包的 Cargo.toml 中
[dependencies]
xtask-watch = "0.1.0"
示例
基本实现
use std::process::Command;
use xtask_watch::{
anyhow::Result,
clap,
};
#[derive(clap::Parser)]
enum Opt {
Watch(xtask_watch::Watch),
}
fn main() -> Result<()> {
let opt: Opt = clap::Parser::parse();
let mut run_command = Command::new("cargo");
run_command.arg("check");
match opt {
Opt::Watch(watch) => {
log::info!("Starting to watch `cargo check`");
watch.run(run_command)?;
}
}
Ok(())
}
更复杂的演示
examples/demo
提供了一个 xtask-watch 的实现,它天真地解析用户提供的命令(或默认使用 cargo check
)并在启动此命令后监视工作空间。
故障排除
当使用 clap
的重新导出时,您可能会遇到以下错误
error[E0433]: failed to resolve: use of undeclared crate or module `clap`
--> xtask/src/main.rs:4:10
|
4 | #[derive(Parser)]
| ^^^^^^ use of undeclared crate or module `clap`
|
= note: this error originates in the derive macro `Parser` (in Nightly builds, run with -Z macro-backtrace for more info)
这种情况发生是因为您还需要在作用域中导入 clap。可以通过以下方式解决这个问题
use xtask_wasm::clap;
#[derive(clap::Parser)]
或者这样
use xtask_wasm::{clap, clap::Parser};
#[derive(Parser)]
依赖项
~3–14MB
~129K SLoC