You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rust的mod.rs中单行引入指定文件夹下的全部模块

Rust 批量导入子模块解决方案

Rust 标准语法目前不支持类似pub mod **的通配符批量声明子模块的语法,官方设计上更倾向于显式声明模块来保证项目结构的可维护性,但针对你的场景可以通过以下两种成熟方案实现需求:

方案1:使用第三方 crate auto-mod 实现零配置自动导入

这是最轻量的使用方案,步骤如下:

  • 在项目Cargo.toml中添加依赖:
[dependencies]
auto-mod = "0.1" # 可替换为crates.io上的最新版本
  • 在views/mod.rs中写入一行代码即可自动导入同目录下所有.rs文件作为子模块:
// 导入所有子模块,pub关键字可按需添加
auto_mod::auto_mod!(pub "src/views");

后续新增.rs文件到views目录下不需要修改任何代码,会自动被识别导入。

方案2:通过自定义构建脚本生成(无第三方依赖)

如果你不想引入额外依赖,可以自己写构建脚本自动生成mod.rs内容:

  • 在项目根目录新建build.rs文件,内容如下:
use std::{fs, path::Path};

fn main() {
    // 配置views目录路径
    let views_path = Path::new("src/views");
    let mut mod_content = String::new();

    // 遍历目录下所有Rust文件
    for entry in fs::read_dir(views_path).expect("无法读取views目录") {
        let entry = entry.expect("目录读取异常");
        let file_path = entry.path();
        // 仅处理.rs文件
        if file_path.extension().and_then(|ext| ext.to_str()) == Some("rs") {
            let mod_name = file_path.file_stem().unwrap().to_str().unwrap();
            // 跳过mod.rs本身
            if mod_name != "mod" {
                mod_content.push_str(&format!("pub mod {};\n", mod_name));
            }
        }
    }

    // 写入内容到mod.rs
    fs::write(views_path.join("mod.rs"), mod_content).expect("写入mod.rs失败");
}
  • 每次新增views目录下的文件后执行cargo build,脚本会自动更新mod.rs的模块声明。

注意:使用该方案不要手动修改views/mod.rs的内容,否则会被构建脚本覆盖。

内容的提问来源于stack exchange,提问作者Randall Coding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 21:06:04