Cloudflare PagesでNuxt3のビルド時に「ENOENT: no such file or directory」エラーの対象方法
Cloudflare PagesでNuxt3のプロジェクトを静的サイトで出力時に「ENOENT: no such file or directory」というエラーが出た時の対象方法を解説します。
現象
Cloudflare Pagesで、Nuxt3のページをSSG(静的サイト生成)させると、以下のエラーが出てビルドができないケースがあります。
[error] ENOENT: no such file or directory, mkdir '/opt/buildhome/repo/dist'
解決方法: nuxt.config.tsで出力ディレクトリを指定する
本来は、nuxt3で「npx nuxi generate」をすると、.output/publicディレクトリに生成して、distディレクトリからシンボリックリンクを貼るのですが、これがうまくいってないようです。
そこで、Nuxt3が採用しているNitroの出力先設定機能を使って、出力先を指定してあげると先ほどの「no such file or directory」が出なくなります。
# nuxt.config.ts
import { resolve } from 'path'
export default defineNuxtConfig({
runtimeConfig: {
},
nitro: {
output: {
publicDir: resolve(__dirname, '.output')
}
}
}
なお、Cloudflare Pagesの設定の「設定 > ビルド & デプロイ > ビルド構成」のビルド出力ディレクトリを、nuxt.config.tsで指定したディレクトリに設定し直す必要があります。
余談
「ENOENT: no such file or directory」エラーの原因は、Cloudflare Pagesがフレームワークを自動で判定して内部的に処理を入れているのが原因のようです。
例えば、Nuxt3プロジェクトの場合、ビルドのタイミングによってはビルド出力ディレクトリを「dist」のままでもうまくいくこともあれば、ビルド出力ディレクトリを「.output/public」にしないとダメな時もあり、この辺りは挙動が不明です。
ちなみに、Nuxt3以外のフレームワークで同じ状況になったら、フレームワークの静的サイトの出力先ディレクトリを変えてみると、うまくいくかもしれません。
価格は記載がある場合を除き、すべて税込みです。
関連キーワード
サーバレスの新着記事
- サーバレスCloudflare R2の料金体系・無料枠まとめ 2024.8.21
- サーバレスCloudflare R2をCyberduckで使う方法 2024.7.31
- サーバレスAIの学習ボット・クローラーからサイトを守るメリットとブロックする方法 2024.7.19
- サーバレスCloudFlare Pagesのビルド環境の違い 2024.5.9
- サーバレスCloudflare D1の料金体系・無料枠まとめ 2024.3.25
- サーバレスGitlab CLIでpush時に「glab auth not found」となった際の対処方法 2024.3.19
- サーバレスCloudFlare Workers AIの料金体系・無料枠まとめ 2024.2.2
- サーバレス複数サイト運営をする際の無料サーバー使いこなし術 2022.9.5