Tauri fs-watch插件仅执行一次监听器回调问题求助
Tauri fs-watch插件仅触发第一次文件变更的解决方案
核心问题分析及解决步骤
1. 保留监听实例引用,防止被垃圾回收
watch返回的监听实例如果被JS引擎垃圾回收,后续文件变更就无法触发回调。需将实例挂载到全局作用域或持久变量中:
import { watch } from "tauri-plugin-fs-watch-api"; // 将监听实例绑定到window全局对象,避免被GC回收 window.fileWatcher = watch( "/home/vincent/test.txt", (event) => { const { type, payload } = event; console.log(`事件触发: 类型=${type}, 文件=${payload.path}`); }, { persistent: true } // 开启持久化监听,确保进程保持活跃以捕获后续变更 );
2. 检查Tauri权限配置
在tauri.conf.json中必须配置文件系统的读取和监听权限,否则插件无法正常工作:
{ "tauri": { "allowlist": { "fs": { "read": true, "watch": true, "scope": ["/home/vincent/test.txt"] // 精确指定监听文件,或用通配符如"$HOME/*"扩大范围 } } } }
3. 更换构建工具(规避Browserify兼容性问题)
Browserify对ES模块和Tauri插件的支持存在兼容性缺陷,建议改用Tauri官方推荐的Vite或Rollup:
- 新建Tauri项目时直接选择Vite模板
- 现有项目迁移时,配置Vite打包JS代码并输出到
public目录
4. 确认插件与Tauri版本匹配
确保tauri-plugin-fs-watch版本与Tauri主版本兼容:
- Tauri v1对应插件版本
^0.1.x - Tauri v2对应插件版本
^2.0.x
验证方式
修改文件后打开Tauri应用开发者工具(Ctrl+Shift+I),检查控制台是否每次变更都输出日志。若问题仍存在,可尝试监听目标文件所在目录,排查是否为单个文件监听的特殊情况。
内容的提问来源于stack exchange,提问作者VforVincent
相关产品推荐
相关产品推荐

