🧊

SvelteKitで、動的なルートを含むアプリをSPAモードでビルドする

最初に結論を書いておく。

svelte.config.jsの指定はこう。

  // ...
  kit: {
    adapter: adapter({ fallback: "index.html" }),
    prerender: { entries: [] },
  },

そして、根本の+layout.jsはこう。

export const ssr = false;

ルートでprerender = trueしない

当初は、adapter-staticのドキュメントを先に見てて、書いてあるとおりにルートの+layout.jsでこう指定してた。

Static site generation • Docs • SvelteKit https://kit.svelte.dev/docs/adapter-static

export const ssr = false;
// コレ
export const prerender = true;

しかし、こうしてしまうと、routes/[itemId]/viewみたいに動的なルートを作ってた場合に、ビルド時エラーになる。

Error: The following routes were marked as prerenderable, but were not prerendered because they were not found while crawling your app

いわく、

  • prerender = trueに従い事前レンダリングしようとしたが
  • (動的なルートを)クローラーが見つけられなかった
  • だからエラーにするぜ!

って。

svelte.config.jsのほうで、prerender: { entries: [] }の指定をしてるなら、このルートでの指定は要らない。

あわせて指定してしまうと、動的なルートではなく静的なルートでさえも見つからないって言われちゃう。