Overview
タイトルの通りなのですが、いつからか、 Nuxt3 の設定の nuxt.config.js で nitro:false && ssr: false の場合は firebase 向けのビルドをするときに必要だった NITRO_PRESET=firebase が必要なくなっていました。
考えると当たり前で SPA モードにするために ssr: false かつ nitro: false にしてるので NITRO の PRESET を指定する必要はないんですけどね。
NITRO_PREST=firebase とは?
以下で言及されています。Hosting 先を指定するときに使用します。
ちなみに以下の Zenn の記事で知りましたが、 nitro: {} の設定において preset に指定してもいいようです。
PRESET の指定でビルド結果が変わる
前提なのですが、そもそもどうして気付いたかというと、たまたま Nuxt3 の RC のバージョンを上げたタイミングで、Firebase Hosting にデプロイしたアプリケーションが Firebase の 404 を返すようになって気づきました。
挙動を調べると NITRO_PRESET を指定してるケースでは nitro: false が効かず、nitro: true の時と同じビルド結果になる、ということがわかりました( .output/public 配下に html が生成されない)
html が生成されていなかったために、Hosting にデプロイしても HTML が見つからずに 404 になっていました。
※ 本来、.output/public 配下に HTML が生成されない(= SSR モード)の時は Cloud Functions などで node のランタイムを動作させておく必要があります。
解決策
nitro: false の時は NITRO の PRESET を指定しない状態でビルドしてデプロイしたら上手く行きました。