/clean

Primary LanguageRust

node_modules 清理工具 (Rust)

这是一个使用 Rust 和 Tokio 编写的异步命令行工具,用于查找并删除项目中的 node_modules 目录。

功能

  • 异步搜索:使用广度优先搜索 (BFS) 高效地查找指定目录(默认为当前目录)及其子目录下的所有 node_modules 文件夹。
  • 并发删除:一旦找到 node_modules 目录,立即启动一个异步任务来递归删除它。
  • 并发限制:使用 tokio::sync::Semaphore 来限制同时进行的删除操作数量,防止系统资源(尤其是磁盘 I/O)过载。
  • 效率:通过异步 I/O 和并发处理,旨在比同步脚本更快地完成清理任务。

工作原理

  1. 程序启动后,从指定目录(默认是运行程序的当前目录)开始搜索。
  2. 一个异步任务 (find_node_modules) 负责广度优先搜索目录结构。
  3. 当搜索任务找到一个名为 node_modules 的目录时,它会将该目录的路径通过 tokio::sync::mpsc 通道发送给主任务。
  4. 主任务从通道接收路径。
  5. 对于每个接收到的路径,主任务会尝试从 Semaphore 获取一个许可。如果当前并发删除任务的数量已达到限制,它会异步等待。
  6. 获取到许可后,主任务会生成一个新的异步任务 (delete_directory_with_permit) 来执行 tokio::fs::remove_dir_all 以删除该 node_modules 目录。
  7. 删除任务完成后,它持有的信号量许可会自动释放,允许其他等待的删除任务开始执行。
  8. 搜索任务和删除任务并行进行,直到搜索完成且所有删除任务都结束。
  9. 程序最后会报告成功删除的目录数量以及遇到的任何错误。

依赖

  • tokio: 用于异步运行时、文件系统操作、任务管理、MPSC 通道和信号量。
  • futures: 用于处理 join_all 等异步 Futures。

如何构建和运行

  1. 确保你已安装 Rust 和 Cargo。

  2. 克隆仓库或将 src/main.rsCargo.toml 放在一个新项目的对应位置。

  3. 在项目根目录下打开终端。

  4. 运行构建命令:

    cargo build --release
  5. 运行程序:

    ./target/release/clean  # 在 Linux/macOS 上
    # 或者
    .\target\release\clean.exe # 在 Windows 上

    或者直接使用 cargo run 进行编译和运行(非优化构建):

    cargo run

⚠️ 警告 ⚠️

此工具会实际删除它找到的所有 node_modules 目录,并且此操作是不可逆的!

请在了解其工作方式并确定要在目标目录运行清理操作后,谨慎使用。 建议在不重要的项目或备份后进行测试。