我用Svelte制作了一个应用程序,现在我想把它移植到SvelteKit。我的应用程序使用window
和document
对象,但它们在SSR中是不可用的。首先,它抛出了ReferenceError: window is not defined
,但我通过检查应用程序是否在浏览器中运行来解决这个问题。但正因为如此,我的应用程序无法工作。
我很乐意得到帮助。
谢谢。
发布于 2022-05-15 21:06:38
可以从handle
钩子中禁用src/hooks.js
中定义的服务器端呈现。
export async function handle({ event, resolve }) {
return resolve(event, { ssr: false });
}
甚至有条件地这样做也是可能的,通常通过检查event
并根据请求做出决定。
如果您的用例要求所有事情都发生在客户端,那么禁用SSR是有意义的。但是请注意,严格地禁用它是因为某些浏览器代码是不推荐的--在这种情况下,通常最好有条件地执行带有browser
检查和动态导入的代码,以满足客户端的依赖关系。我会探索为什么你的应用程序停止工作,然后跳到禁用SSR。
发布于 2022-09-09 08:38:01
由于SvelteKit中的更改,前面的答案不再起作用。有关更多信息,请参见PR:https://github.com/sveltejs/kit/pull/6197和文档:https://kit.svelte.dev/docs/page-options
基本上,现在您在每个页面/布局级别上禁用了SSR,所以而不是在src/hooks.server.js中(是的,hooks.js也作为服务器通过添加客户端挂钩而被分离到客户端)。
export function handle({ event, resolve }) {
return resolve(event, {
ssr: false
});
你现在做了
// src/routes/+layout.js
export const ssr = false;
请确保在+layout.js
中,而不是在+layout.svelte
中放置上面的行
发布于 2022-08-11 19:49:32
您还可以禁用svelte.config.js文件中的ssr。请参阅细长结构以查看选项。在整个应用程序中,设置预录制器已启用= false以完全禁用预录制。
https://stackoverflow.com/questions/72251017
复制相似问题