OpenNext/Cloudflare 的兼容性约束,params 和 searchParams 必须声明为 Promise 异步类型

在使用 OpenNext/Cloudflare 生态(如 @opennextjs/cloudflare 1.9.x 及以上)部署 Next.js 15+ 项目时,所有动态路由 page/route 的 params 和 searchParams 必须声明为 Promise 类型。

December 11, 2025

在使用 OpenNext/Cloudflare 生态(如 @opennextjs/cloudflare 1.9.x 及以上)部署 Next.js 15+ 项目时,所有动态路由 page/route 的 params 和 searchParams 必须声明为 Promise 类型(如 params: Promise<{ slug: string }>),并在函数体内 await。否则会因类型不兼容导致构建失败。

// src/app/blog/[slug]/page.tsx

// 1. 导出文章元数据
export async function generateMetadata({
  params,
}: {
  params: Promise<{ slug: string }>;
}) {
  // 在函数体内 await
  const { slug } = await params;
}

// 2. 导出页面内容
export default async function BlogPage({
  params,
}: {
  params: Promise<{ slug: string }>;
}) {
  // 在函数体内 await
  const { slug } = await params;
}

此要求为 OpenNext/Cloudflare 的兼容性约束,与 Next.js 官方类型定义不同,请勿使用同步对象类型声明 params/searchParams。