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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 22:32:05