vite's `host: host || false` config falls back to vite's
`server.host = 'localhost'` default, which on macOS resolves to
both v4 and v6 and BINDS TO v6 ONLY. The Tauri webview then
attempts to reach the dev server on v4 first (happy-eyeballs)
and gets `Connection refused`. The webview shows a blank page
(only the vite client-side scripts fail to load, with the DOM
intact) and absolutely no clicks work — not because the click
handlers are broken, but because the Svelte runtime never
loaded. The user reported 'search tut sich nix genau auch bei
compose etc.' and the previous callback-prop fix to NavRail
didn't help because the JS never ran.
Two coordinated fixes:
1. `vite.config.ts`: `host: host || '127.0.0.1'` — explicit
IPv4-only binding that matches the `devUrl` in
tauri.conf.json (`http://127.0.0.1:1430`).
2. `tauri.conf.json`: `devUrl: 'http://127.0.0.1:1430'`
instead of `http://localhost:1430` — unambiguous.
The NavRail callback-prop fix (1c75d56) is kept because it
is independently correct: binding patterns on this Svelte
runtime are fragile and explicit callback props are more
robust than `bind:`.
42 lines
1.4 KiB
TypeScript
42 lines
1.4 KiB
TypeScript
import { defineConfig } from "vite";
|
|
import { svelte } from "@sveltejs/vite-plugin-svelte";
|
|
import { viteStaticCopy } from "vite-plugin-static-copy";
|
|
|
|
const host = process.env.TAURI_DEV_HOST;
|
|
|
|
export default defineConfig(async () => ({
|
|
plugins: [
|
|
svelte(),
|
|
viteStaticCopy({
|
|
targets: [
|
|
{ src: "src/assets/fonts/*", dest: "fonts" },
|
|
],
|
|
}),
|
|
],
|
|
clearScreen: false,
|
|
server: {
|
|
port: 1430,
|
|
strictPort: true,
|
|
// Always bind to IPv4 127.0.0.1 explicitly. `host || false` lets
|
|
// vite pick "localhost" which on macOS resolves to both v4 and v6
|
|
// and binds to v6 by default — the Tauri webview then tries v4
|
|
// first and gets a connection refused. The explicit v4 address
|
|
// matches `tauri.conf.json`'s `devUrl` so the webview connects
|
|
// reliably. HMR via Tauri (cross-platform) still works because
|
|
// vite binds both v4 and v6 in modern versions when the address
|
|
// is the v4 loopback; if that breaks for someone we can use
|
|
// `0.0.0.0` to listen on all interfaces instead.
|
|
host: host || "127.0.0.1",
|
|
hmr: host
|
|
? { protocol: "ws", host, port: 1431 }
|
|
: undefined,
|
|
watch: { ignored: ["**/src-tauri/**"] },
|
|
},
|
|
envPrefix: ["VITE_", "TAURI_ENV_*"],
|
|
build: {
|
|
target: process.env.TAURI_ENV_PLATFORM === "windows" ? "chrome105" : "safari13",
|
|
minify: !process.env.TAURI_ENV_DEBUG ? "esbuild" : false,
|
|
sourcemap: !!process.env.TAURI_ENV_DEBUG,
|
|
},
|
|
}));
|