1、Checklist(为什么要这么做)
- 启用 SSG / SPA:
ssr: false
Tauri 不支持依赖服务端的方案,因此 Nuxt 需要禁用 SSR。(Tauri) frontendDist使用默认../dist
Nuxt 静态产物放到 dist,Tauri 打包时把它当作前端资源目录。(Tauri)- 构建走静态生成:
generate(对应nuxt generate / nuxi generate)
generate会预渲染路由并输出可直接静态部署的文件。(Tauri) - (可选)关闭 Nuxt telemetry
可用telemetry: false或环境变量等方式关闭。(Tauri)
2、Tauri 侧配置:src-tauri/tauri.conf.json
这段配置的意义是:
tauri dev前先启动 Nuxt dev server,并加载devUrltauri build前先执行generate产出dist/,再把frontendDist打包进应用
json
{
"build": {
"beforeDevCommand": "npm run dev",
"beforeBuildCommand": "npm run generate",
"devUrl": "http://localhost:3000",
"frontendDist": "../dist"
}
}
(Tauri)
3、Nuxt 侧配置:nuxt.config.ts(重点是移动端与稳定性)
官方推荐的 Nuxt 配置大致如下(你可以直接拷贝再按项目改动):
arduino
export default defineNuxtConfig({
compatibilityDate: '2025-05-15',
// (optional) Enable the Nuxt devtools
devtools: { enabled: true },
// Enable SSG / SPA
ssr: false,
// Enables the dev server to be discoverable by other devices (useful for iOS physical devices)
devServer: { host: '0' },
vite: {
// Better support for Tauri CLI output
clearScreen: false,
// Enable environment variables (include TAURI_*)
envPrefix: ['VITE_', 'TAURI_'],
server: {
// Tauri requires a consistent port
strictPort: true,
},
},
// Avoids EMFILE: too many open files (watch)
ignore: ['**/src-tauri/**'],
})
这些字段各自解决的问题:
ssr: false:让 Nuxt 走纯客户端渲染/静态路线,匹配 Tauri 的"静态宿主"模型。(Tauri)devServer.host: '0':让 dev server 可被同一局域网设备发现,真机调试(尤其 iOS 物理机)更顺畅。(Tauri)vite.server.strictPort: true:端口固定,避免 Tauri 以为是 3000 但 Nuxt 自动换端口导致加载失败。(Tauri)ignore: ['**/src-tauri/**']:减少 watch 造成的文件句柄过多(EMFILE)问题。(Tauri)envPrefix:把TAURI_前缀变量也注入到前端环境变量体系里,方便移动端/工具链联动。(Tauri)
4、package.json scripts(确保 Tauri 能调用到)
至少保证有 dev 与 generate(你的命令也可以用 pnpm/yarn/deno 版本,和 tauri.conf.json 对齐即可):
json
{
"scripts": {
"dev": "nuxt dev",
"generate": "nuxt generate",
"build": "nuxt build"
}
}
nuxt generate 会把路由预渲染并输出静态文件,适合让 Tauri 打包。(Nuxt)
5、一键启动与构建(你最终只需要两条命令)
-
开发运行:
cargo tauri dev
-
打包构建:
cargo tauri build
Tauri CLI 会在构建时使用 build.beforeBuildCommand 先生成前端产物,再读取 build.frontendDist 将其打包进应用。(Tauri)