-
-
Notifications
You must be signed in to change notification settings - Fork 2.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
@tauri-apps/api@1.2.0, "__TAURI_METADATA__" in window cause ReferenceError: window is not defined #6226
Comments
And there will be |
Looks like this is failing my SvelteKit production builds (open image in new window): This spews out a massive JS chunk for SvelteKit. It mentions tauri at the end:
Then it gives a window is not defined:
|
Still having this issue, here's a complete log if it helps: https://pastebin.com/B2qyqrNc |
The same is also happening here |
@Owez |
I'm using both, the code I wrote had problems with vite's dev ssr on sveltekit erroring so everything I've wrote has been protected inside of an |
|
Same here in NextJs. Even wrapping components in |
See #6554 (possible workaround also included) |
For those afflicted by this issue when using rspc with Tauri and NextJS (very specific, I know), I've chucked together a workaround transport that avoids importing Tauri at all during build time and server-side. https://gist.github.com/kaylendog/ea3d2ff8607d8433849c6bd431fb39b0 |
For folks using sveltekit and/or vite, one workaround is to use vite-plugin-iso-import. Before// src/routes/+layout.ts
import { appDataDir } from '@tauri-apps/api/path'
import { appWindow } from '@tauri-apps/api/window'
// ERROR
// [vite] Error when evaluating SSR module /src/routes/+layout.ts: failed to import "@tauri-apps/api/path"
// ReferenceError: navigator is not defined After// src/routes/+layout.ts
import { appDataDir } from '@tauri-apps/api/path?client'
import { appWindow } from '@tauri-apps/api/window?client'
if (!import.meta.env.SSR) {
console.log({ appWindow, appDataDir })
}
// All good, no error To retain full LSP/intellisense functionality, a couple of steps might be required. One of which is the following: // src/lib/types/global.d.ts
declare module '@tauri-apps/api/path?client' {
import all from '@tauri-apps/api/path'
export = all
}
declare module '@tauri-apps/api/window?client' {
import all from '@tauri-apps/api/window'
export = all
} See the docs for setup info. This workaround used to be mentioned in the svelte docs, but seems to have missed the cut in a recent docs refactor. Nevertheless, it remains a viable workaround. |
This was fixed in v2 by removing variables like appWindow and solely relying on functions like getCurrent(). Since this is a breaking change we can't backport it to v1. Until v2 hits stable you'll have to keep using |
Same issue while using 2.0.0-beta. |
@bennekrouf |
I installed let appWindow;
if ("__TAURI_METADATA__" in window) { // this line |
I've been trying to work around this all day, changing my vite config to bundle the app differently. How can I postpone importing the @tauri-apps module so the window object is available? No calls to the rust process work from my web view in debug / production - they work fine in dev though. A dynamic import of this module, that only mounts my react app once the window is available, hasn't helped. The UI is displayed and MUI works but I can see my application config has failed to load (via an |
Tauri 2.0 is still in RC status at this point, will there be a fix to v1? Seems premature to abandon maintenance of the 1x release. |
Aside from my comment above, I don't quite remember the details of how I worked around this. But I do remember that I switched from sveltekit to svelte shortly thereafter, side-stepping this issue entirely. @gknapp Unless you have specific reasons for using sveltekit with tauri, consider swapping out sveltekit with plain svelte (i.e. an SPA like this: |
v1 is not abandoned... Like i said above, we literally can't "fix" this "issue" in v1 without breaking changes or by introducing new modules in the package that only contain the methods that work in SSR contexts. |
Just to clarify, I'm not using sveltekit, I'm using vite.js. |
I was just surprised by the error as I thought more devs might have run into it before me. My app has a thin rust layer (mostly for IO) and is primarily built in the web view. My app doesn't use SSR, I've added vite config params to explicitly disable it. I've run out of options I can think of in my v1 app, so am migrating to v2 to see if can build a debug / production version. I don't really understand how the window object isn't in scope for @tauri-apps but react and other front-end deps run fine. I've rewritten my entry point so it only dynamically imports @tauri-apps/api once |
Having upgraded my app to V2 and dug into the issue some more, I found my initial I subsequently found I had to dynamically / lazy load monaco editor, another dependency and this resolved the error message. Update: I backported the lazy load change for monaco editor to my tauri V1 branch, however my debug build still failed so the V2 upgrade was required in addition to the monaco change. |
tauri/tooling/api/src/window.ts
Line 2033 in 50576a5
When running headless tests, this might be troublesome.
Should check
typeof window !== 'undefined'
first.The text was updated successfully, but these errors were encountered: