为何Rust中pub use重导出Tauri命令函数无法被generate_handler识别?
问题原因与解决方案
核心原因
Tauri的#[tauri::command]宏不只是给函数打标记,还会在函数所在的模块里生成一个隐藏的关联项__cmd__{函数名}(这里就是__cmd__add),tauri::generate_handler正是通过识别这个隐藏项来注册命令的。
当你用pub use operation::add单独重导出函数时,只会导出add函数本身,不会带上这个宏生成的隐藏__cmd__add项,所以generate_handler在util模块里找不到它需要的标记,就会抛出“could not find __cmd__add in util”的错误。
而pub use operation::*是通配符导出,会把operation模块里所有公共项(包括宏生成的隐藏关联项)都导入到util模块,自然就能被generate_handler识别到。
解决方案
如果你不想用通配符导出,可以手动同时导出函数和对应的隐藏关联项:
修改src/util/mod.rs:
mod operation; // 同时导出函数和宏生成的隐藏关联项 pub use operation::{add, __cmd__add};
这样既保持了精确导出,又能让tauri::generate_handler找到所需的标记项,正常注册命令。
内容的提问来源于stack exchange,提问作者Peter Wong
相关产品推荐
相关产品推荐

