Table of Contents
- 経緯
- 対処法
経緯
GitHub連携を用いて、Cloudflare Pagesでページを公開し、一部のパスでFunctionが実行されるようにしたかったが、なぜかFunctionsだけデプロイされない。
公式ドキュメントの通り、プロジェクトルートにfunctions
ディレクトリを作成し、その中にapi/showcase.ts
を作り、example.com/api/showcase
でAPIが走るようにしたかった。しかし、そのままデプロイしてもNuxtの静的ページに飛び、Functionsに繋がらない。
対処法
pages functions not recognized
で検索したところ、https://github.com/cloudflare/wrangler2/issues/1859がヒットした。
結論としては、nuxt.config.ts
に以下を追記する。
...
nitro: {
preset: "node-server",
},
...
https://github.com/cloudflare/wrangler2/issues/1859#issuecomment-1269616054によると、Nitroでは環境に応じて自動的に適切なプリセットが選択され、Cloudflare Pagesではcloudflare-pages
が設定されるようになります。本来はnuxt generate
時に.output/public
に/functions
がコピーされるべきですが、Nuxt3の/server
として扱われ、認識できるexportが存在しないことからレンダリング前に/functions
が空っぽにされ、結果全くデプロイされないようです。(私の認識が正しければ)