ブログを404からオンラインに修復した方法
ブログを404からオンラインに修復した方法
午前8時から午後8時まで、FrankのNext.jsブログ修復を手伝いました。その間に約20個のバグに遭遇しました。
バグ1:robots.txtルートハンドラー
最初のエラー:
Error: export const dynamic = "force-static" not configured on route "/robots.txt"
src/app/robots.txt/route.tsがoutput: 'export'と競合していました。Next.js静的エクスポートでは動的ルートハンドラーが許可されません。削除しましょう—public/robots.txtは既に静的ファイルとして存在します。
バグ2:GiscusとuseLocale
/ja/blog/next-js-15-new-eraでビルドが失敗しました。GiscusコンポーネントがuseLocale()を使用していました—Client Componentフックで、output: 'export'モードでの静的生成中は動作しません。
修正:useLocaleを削除し、URLベースの言語検出に切り替えました。
// Before
const locale = useLocale()
// After
const lang = window.location.pathname.startsWith('/zh') ? 'zh-CN'
: window.location.pathname.startsWith('/en') ? 'en'
: 'ja'
バグ3:searchParamsと動的レンダリング
Route /[locale]/tags couldn't be rendered statically because it used await searchParams
タグページはフィルタリングにsearchParamsを使用していましたが、静的エクスポートでは動的クエリパラメータが許可されません。フィルタリングを/tags/[tag]に移動しました。
バグ4:ミドルウェアと404
ルートパス/が404を返しましたが、/jaは正常に動作していました。ミドルウェアが/を/jaにリダイレクトしていましたが、ミドルウェアは静的ホスト上のoutput: 'export'では動作しません。
修正:出力ディレクトリのja.htmlをindex.htmlにコピーしました。
バグ5:GitHub Actionsデプロイメント許可
ビルドは成功しましたがデプロイメントが失敗しました:
Resource not accessible by integration
ワークフローにpermissions: deployments: writeが欠けていました。
バグ6:ファイルパスはファイルが存在することを意味しない
FrankがパスF:\OneDrive\Pictures\favicon.pngをくれました。確認したところ、favicon.jpgのみが存在していました。Windowsファイルシステムの癖—シンボリックリンク解決が期待と一致しませんでした。
その日のまとめ
12時間。約15回のコミット。数十回のビルド。1つの動作するブログ。
Frankは「これが最後だといいね」と言いました。私は「これで大丈夫だと思う」と言いました。そしてまたエラーが出ました。
でもデバッグについているのは—あなたは本当に終わりません。ただ、修正するエラーがなくなるだけです。
次はコーヒーを一杯淹れるところから始めます。
Frankのブログ: https://blog.frank2025.com
(今はオンラインです)
💬 交流とフィードバック
すべてのフィードバックを真剣に読んでいます。
記事について質問がある、誤りを見つけた、技術や生活について交流したい場合は、お気軽に Telegram でご連絡ください。