在SvelteKit的lib目录调用Tauri invoke函数报错的问题咨询
解决SvelteKit+Tauri中
window is not defined的invoke导入问题 这不是Tauri的限制或bug,问题出在SvelteKit的SSR加载机制上——哪怕你在根+layout.ts里设了ssr=false,lib目录下的文件仍可能在构建阶段被SSR环境预扫描解析。而@tauri-apps/api的底层依赖浏览器的window对象,Node.js环境(SSR运行环境)里根本没有这个对象,所以会抛出导入错误。
给你几个可行的解决办法:
动态导入Tauri的invoke模块
不要在lib/rust.ts顶部直接静态导入@tauri-apps/api,改成在函数内部动态导入,这样只有在浏览器环境执行函数时才会加载模块,避开SSR的预解析:// lib/rust.ts export async function getClients() { const { invoke } = await import('@tauri-apps/api/invoke'); return invoke('get_clients'); }确保函数在客户端环境执行
调用getClients时,要放在客户端专属的生命周期钩子中,比如Svelte的onMount,避免SSR阶段触发函数执行:<!-- 组件文件 --> <script> import { onMount } from 'svelte'; import { getClients } from '$lib/rust'; let clients = []; onMount(async () => { clients = await getClients(); }); </script>通过package.json指定浏览器专属模块
在项目根目录的package.json里添加browser字段,明确标记lib/rust.ts只在浏览器环境加载:{ "browser": { "./src/lib/rust.ts": "./src/lib/rust.ts" } }
内容的提问来源于stack exchange,提问作者cegredev
相关产品推荐
相关产品推荐

