以下是针对 Tauri + SvelteKit + Bun 项目打包后出现 asset not found
错误的完整修复方案,结合官方文档和实际配置场景:
1. 核心问题分析
asset not found
错误通常由以下原因导致:
- SvelteKit 构建输出目录未正确配置:Tauri 或 Bun 无法定位
index.html
等静态资源。 - SSR/SSG 模式冲突:SvelteKit 未正确禁用服务端渲染(SSR)或静态生成(SSG)配置。
- Tauri 资源路径未同步:
tauri.conf.json
中的distDir
未指向 SvelteKit 的构建目录。 - Bun 静态服务配置缺失:Bun 未正确配置静态文件服务或路由处理。
2. 修复步骤
2.1 配置 SvelteKit 为静态生成模式
在 svelte.config.js
中,必须使用 @sveltejs/adapter-static
并禁用 SSR:
import adapter from '@sveltejs/adapter-static';
export default {
kit: {
adapter: adapter({
pages: 'build', // 构建输出目录
assets: 'build', // 静态资源目录
fallback: 'index.html' // 客户端路由回退
}),
},
};
关键点:
- 禁用 SSR:在
src/routes/+layout.ts
中添加:export const prerender = true; export const ssr = false;
- 安装依赖:
bun add --dev @sveltejs/adapter-static
18。
2.2 确保 Tauri 指向正确构建目录
在 src-tauri/tauri.conf.json
中配置:
{
"build": {
"distDir": "../build", // 必须与 SvelteKit 的输出目录一致
"devPath": "http://localhost:5173"
},
"tauri": {
"embeddedServer": {
"pattern": { "use": "browser" } // 处理客户端路由
}
}
}
验证:
2.3 配置 Bun 静态文件服务
创建 server.js
文件,处理静态资源和路由:
import { serve } from 'bun';
serve({
port: 3000,
fetch(request) {
const path = new URL(request.url).pathname;
const file = Bun.file(`./build${path === '/' ? '/index.html' : path}`);
return new Response(file);
},
});
启动命令:
bun run build && bun run server.js
注意:Bun 的路径需与 SvelteKit 的构建目录完全匹配 2780。
3. 常见场景及解决方案
3.1 动态路由失效
现象:访问 /user/123
等动态路径时返回 404。
修复:
- 在
svelte.config.js
中确认fallback: 'index.html'
。 - 在 Tauri 的
tauri.conf.json
中启用"pattern": "browser"
132。
3.2 静态资源加载失败(CSS/JS)
现象:控制台提示资源路径错误。
修复:
- 检查 SvelteKit 的
assets
目录是否包含资源。 - 确保 Bun 的静态服务路径正确(如
./build/_app/...
)69。
3.3 生产环境路径问题
现象:开发环境正常,但打包后资源丢失。
修复:
4. 参考文档
版权声明
本文由 优快云 用户原创,未经许可禁止转载。如需引用请注明出处并附原文链接。