修复 Tauri dev 插件资源自触发重建

build.rs 只在内容变化时落盘插件资源,避免构建产物触发下一轮重建

新增应用目录与 src-tauri 的 .taurignore,把 resources/plugins 排除出 dev 监听
This commit is contained in:
2026-09-11 23:25:31 +08:00
parent b67cb18b45
commit 299877b197
3 changed files with 23 additions and 1 deletions
+4
View File
@@ -0,0 +1,4 @@
# resources/plugins 由 build.rs 从 plugins/ 复制生成,属于构建产物。
# 它在 dev 监听范围内,重新生成会让 Tauri dev 误判为源码改动而触发
# “构建 -> 监听 -> 再构建”的自触发循环。
resources/plugins/
@@ -0,0 +1,4 @@
# resources/plugins 由 build.rs 从 plugins/ 复制生成,属于构建产物。
# 它在 dev 监听范围内,重新生成会让 Tauri dev 误判为源码改动而触发
# “构建 -> 监听 -> 再构建”的自触发循环。
resources/plugins/
+15 -1
View File
@@ -293,6 +293,20 @@ fn stage_plugin_workspace(manifest_dir: &std::path::Path) {
}
}
#[cfg(windows)]
fn stage_plugin_file(source: &std::path::Path, destination: &std::path::Path) {
let Ok(bytes) = std::fs::read(source) else {
return;
};
if std::fs::read(destination).is_ok_and(|existing| existing == bytes) {
return;
}
if let Some(parent) = destination.parent() {
std::fs::create_dir_all(parent).expect("创建插件资源目录失败");
}
std::fs::write(destination, bytes).expect("复制插件资源失败");
}
#[cfg(windows)]
fn copy_plugin_tree(source: &std::path::Path, destination: &std::path::Path) {
let entries = match std::fs::read_dir(source) {
@@ -317,7 +331,7 @@ fn copy_plugin_tree(source: &std::path::Path, destination: &std::path::Path) {
if name.contains(".test.") {
continue;
}
copy_plugin_file(&path, &target);
stage_plugin_file(&path, &target);
}
}
}