Svelte: Component is not valid SSR component
SvelteKitでSSR時にクライアント専用コードが実行された場合のエラー
概要
SvelteKitでサーバーサイドレンダリング(SSR)時にブラウザ専用のAPIやライブラリにアクセスしようとした場合に発生するエラーです。
エラーメッセージ
Error: <Component> is not a valid SSR component. You may need to review your build config
または
ReferenceError: window is not defined
原因
- ブラウザAPIへのアクセス: window, document, localStorageなどがSSR時に存在しない
- クライアント専用ライブラリ: ブラウザでしか動作しないnpmパッケージ
- 動的インポートの問題: SSR非対応のコンポーネント
解決策
1. browser チェックを使用
| |
2. onMount 内でクライアント処理
| |
3. 動的インポートでSSRを回避
| |
4. +page.js で ssr を無効化
| |
5. コンポーネントレベルで ssr 無効化
| |
6. vite.config.js で SSR 除外
| |
7. #if browser でテンプレートをガード
| |
よくある間違い
- サードパーティライブラリがSSR対応か確認していない
- localStorageを直接トップレベルで使用
- グローバル変数としてwindowを参照
Svelte の他のエラー
この記事は役に立ちましたか?