#xtask #command #watch #source #customizable #projects #wasm

xtask-watch

xtask-watch 是一个可定制的辅助工具,用于监视项目中使用 xtask 的更改

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开发工具 中排名

Download history 59/week @ 2024-03-15 27/week @ 2024-03-22 97/week @ 2024-03-29 28/week @ 2024-04-05 38/week @ 2024-04-12 24/week @ 2024-04-19 277/week @ 2024-04-26 43/week @ 2024-05-03 32/week @ 2024-05-10 33/week @ 2024-05-17 40/week @ 2024-05-24 37/week @ 2024-05-31 22/week @ 2024-06-07 33/week @ 2024-06-14 36/week @ 2024-06-21 3/week @ 2024-06-28

每月 下载次数 99
3 个 crate 中使用(通过 xtask-wasm

MIT/Apache

25KB
361

xtask-watch

actions status crate version documentation dependencies status licenses

此 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