mcpField
N
nextjs-16-complete-guide

nextjs-16-complete-guide

github.com/fernandofuc开发0330 次安装40 周前更新
代码仓库

关于 nextjs-16-complete-guide

面向 Next.js 16 项目开发与迁移的参考指南,涵盖缓存、构建、运行时和 React Compiler 等变化,也介绍 DevTools MCP 调试。适合新项目和从 Next.js 15 升级的开发者。

主要功能

  1. 01Cache Components 与 “use cache”
  2. 02Turbopack 默认构建
  3. 03middleware.ts 迁移至 proxy.ts
  4. 04DevTools MCP 调试
  5. 05React Compiler 自动记忆化
  6. 06Next.js 15 到 16 迁移步骤

适用场景

  1. 01搭建 Next.js 16 新项目
  2. 02升级 Next.js 15 应用
  3. 03配置缓存与部分预渲染
  4. 04通过 AI Agent 排查应用问题

MCP 相关

介绍 Next.js 16 的 DevTools MCP 集成,使 AI Agent 能读取浏览器与服务器日志、路由和缓存信息及错误堆栈。文档提及可与 Claude Code、Cursor 等兼容 MCP 的工具配合使用。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/fernandofuc/nextjs-c-s --skill nextjs-16-complete-guide

安装后在 Claude Code 中输入/nextjs-16-complete-guide确认已加载。

详细介绍

Next.js 16 完整指南

用途

全面介绍 Next.js 16 的革新功能:通过 "use cache" 实现的 Cache Components、默认启用且稳定的 Turbopack、proxy.ts 架构、DevTools MCP 集成,以及对 React Compiler 的支持。

适用场景

  • 启动新的 Next.js 项目(从一开始就使用 16)
  • 从 Next.js 15 迁移到 16
  • 了解 Cache Components 和部分预渲染(PPR)
  • 配置 Turbopack 以获得最佳性能
  • 将 middleware.ts 迁移到 proxy.ts
  • 借助 DevTools MCP 进行 AI 辅助调试
  • 设置 React Compiler,实现自动记忆化

变化一览:Next.js 15 → 16

整体概况

Next.js 15 是过渡阶段——异步 API、实验性的 Turbopack,以及不断变化的缓存默认行为。 Next.js 16 是收获阶段——一切都变得稳定、快速,并可用于生产环境。

主要区别
功能Next.js 15Next.js 16
打包器Webpack(默认)、Turbopack(可选启用的 Beta 版)Turbopack(默认,稳定版)
缓存隐式,默认行为令人困惑使用 "use cache" 显式控制
网络层middleware.ts(边缘运行时)proxy.ts(Node.js 运行时)
DevTools基础错误消息集成 MCP,实现 AI 调试
React Compiler实验性稳定,可用于生产环境
性能基准水平构建速度提升 2-5×,Fast Refresh 速度提升 10×

🚀 核心功能(20% 的功能带来 80% 的收益)

1. Cache Components + "use cache"

Next.js 15 中的问题:

  • 隐式缓存就像“魔法”——难以预测哪些内容会被缓存
  • 静态和动态模式之间的切换方式不明确
  • 性能优化感觉像是在碰运气

Next.js 16 中的解决方案:

// Enable in next.config.ts
const nextConfig = {
  cacheComponents: true,
};

export default nextConfig;

使用模式:

// app/dashboard/page.tsx
import { Suspense } from 'react';

// This component caches its output
async function UserMetrics() {
  'use cache'; // 🎯 Explicit caching

  const metrics = await fetchMetrics(); // Cached result

  return <MetricsCard data={metrics} />;
}

// This stays dynamic
async function LiveBalance() {
  const balance = await fetchBalance(); // Always fresh
  return <BalanceWidget balance={balance} />;
}

export default function Dashboard() {
  return (
    <div>
      <Suspense fallback={<LoadingMetrics />}>
        <UserMetrics /> {/* Cached, instant load */}
      </Suspense>

      <LiveBalance /> {/* Dynamic, real-time */}
    </div>
  );
}

这为何重要:

  • 即时导航——缓存部分会立即加载
  • 按需获取最新内容——仅动态部分会按需获取数据
  • 行为可预测——由你控制哪些内容会被缓存
  • SaaS 仪表板——非常适合混合展示静态和动态内容的面板

缓存粒度:

// Cache entire page
export default async function Page() {
  'use cache';
  return <PageContent />;
}

// Cache individual component
async function ExpensiveWidget() {
  'use cache';
  return <Chart data={await getData()} />;
}

// Cache function result
async function getStats() {
  'use cache';
  return await database.query('...');
}

2. Turbopack:默认打包器(稳定版)

性能数据(Vercel 官方基准测试):

  • 生产构建速度提升 2-5×
  • 开发期间 Fast Refresh 速度最高提升 10×
  • 文件系统缓存——大型项目的重启速度更快

无需配置:

// next.config.ts
// Turbopack is now default - no config required!

选择退出(如有需要):

# Use Webpack instead
next build --webpack

文件系统缓存(Beta 版):

// next.config.ts
const nextConfig = {
  experimental: {
    turbopackFileSystemCacheForDev: true, // Faster restarts
  },
};

这为何重要:

  • 反馈循环更快——立即看到更改(速度提升 10×)
  • CI/CD 时间更短——生产构建速度提升 2-5×
  • 开发体验更好——少等待,多交付
  • 适用于大型项目——比 Webpack 更具扩展性

你会注意到:

# Before (Webpack)
✓ Compiled in 4.2s

# After (Turbopack)
✓ Compiled in 0.4s  # 10× faster

3. proxy.ts 取代 middleware.ts

变化内容:

# Old (Next.js 15)
middleware.ts  # Edge runtime, confusing

# New (Next.js 16)
proxy.ts       # Node.js runtime, explicit

迁移示例:

// OLD: middleware.ts
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';

export function middleware(request: NextRequest) {
  return NextResponse.redirect(new URL('/home', request.url));
}

export const config = {
  matcher: '/about/:path*',
};
// NEW: proxy.ts
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';

export default function proxy(request: NextRequest) {  // Changed function name
  return NextResponse.redirect(new URL('/home', request.url));
}

export const config = {
  matcher: '/about/:path*',
};

主要变化:

  1. 重命名文件:middleware.ts → proxy.ts
  2. 重命名导出:export function middleware → export default function proxy
  3. 运行时:在 Node.js 上运行(而非边缘运行时)

这为何重要:

  • 边界更清晰——“Proxy”表示网络入口
  • 运行时可预测——始终使用 Node.js,不再对边缘运行时产生歧义
  • 调试更方便——使用标准 Node.js 环境

4. DevTools MCP(AI 辅助调试)

功能说明: Next.js 16 集成了模型上下文协议(MCP),因此 AI Agent 可以:

  • 读取统一的浏览器和服务端日志
  • 理解 Next.js 路由和缓存
  • 自动获取错误堆栈跟踪
  • 获得与页面相关的调试上下文

这为何重要:

  • AI 副驾驶可以原生调试你的 Next.js 应用
  • 更快地调试——AI 能理解框架内部机制
  • 开发体验更好——Agent 能看到你看到的内容(甚至更多)

使用场景:

You: "Why is this page not caching?"
AI Agent (with MCP):
  - Reads server logs
  - Sees route configuration
  - Checks cache headers
  - Knows Next.js 16 caching rules
  → "You're missing 'use cache' directive in your component"

集成: 可与 Claude Code、Cursor 及其他兼容 MCP 的工具自动配合使用。

5. React Compiler(稳定版)

功能: 自动对组件进行记忆化处理——无需再手动使用 useMemo、useCallback、React.memo。

设置:

npm install babel-plugin-react-compiler@latest
// next.config.ts
const nextConfig = {
  reactCompiler: true,  // Moved from experimental to stable
};

之前(手动优化):

// You had to do this everywhere
const MemoizedComponent = React.memo(function Component({ data }) {
  const processed = useMemo(() => processData(data), [data]);
  const handleClick = useCallback(() => {
    console.log(processed);
  }, [processed]);

  return <div onClick={handleClick}>{processed}</div>;
});

之后(由 React Compiler 完成):

// Just write code, compiler optimizes automatically
function Component({ data }) {
  const processed = processData(data);  // Auto-memoized
  const handleClick = () => {            // Auto-memoized
    console.log(processed);
  };

  return <div onClick={handleClick}>{processed}</div>;
}

重要性:

  • 减少样板代码 - 编写更简洁的代码
  • 性能更佳 - 编译器比手动优化更智能
  • 不会出错 - 编译器永远不会遗漏依赖项

🔥 重大变更(15 → 16)

必需的变更
1. Node.js 版本
# Minimum: Node.js 20.9+
# Next.js 15: Node.js 18 worked
# Next.js 16: Node.js 18 no longer supported
2. 异步 params 和 searchParams
// ❌ OLD (Next.js 15)
export default function Page({ params, searchParams }) {
  const id = params.id;  // Synchronous
}

// ✅ NEW (Next.js 16)
export default async function Page({ params, searchParams }) {
  const { id } = await params;  // Must await
  const { query } = await searchParams;
}
3. 异步 cookies()、headers()、draftMode()
// ❌ OLD
import { cookies } from 'next/headers';

export function MyComponent() {
  const token = cookies().get('token');  // Synchronous
}

// ✅ NEW
import { cookies } from 'next/headers';

export async function MyComponent() {
  const cookieStore = await cookies();  // Must await
  const token = cookieStore.get('token');
}
4. revalidateTag() 现在需要 cacheLife 配置
// ❌ OLD
revalidateTag('posts');

// ✅ NEW
revalidateTag('posts', 'max');     // Options: 'max', 'hours', 'days'
5. middleware.ts → proxy.ts
# Required migration
mv middleware.ts proxy.ts

# Update function name
export default function proxy(request) { ... }
已移除的功能
  • AMP 支持 - 已完全移除
  • next lint 命令 - 已移除
  • Node.js 18 - 不再支持
  • TypeScript <5.1 - 不再支持

📦 迁移指南(分步操作)

1. 迁移前检查清单
# Check current versions
node --version    # Should be 20.9+
npm list next     # Current Next.js version
npm list react    # React version
2. 自动迁移
# Upgrade to latest Next.js 16
npm install next@latest react@latest react-dom@latest

# Run codemod (handles most changes automatically)
npx @next/codemod@canary upgrade latest
3. 手动变更

更新 next.config:

// next.config.ts
import type { NextConfig } from 'next';

const nextConfig: NextConfig = {
  // Enable Cache Components
  cacheComponents: true,

  // Enable React Compiler
  reactCompiler: true,

  // Optional: File system caching
  experimental: {
    turbopackFileSystemCacheForDev: true,
  },
};

export default nextConfig;

重命名 middleware:

# If you have middleware.ts
git mv middleware.ts proxy.ts

# Update function name in proxy.ts
export default function proxy(request: NextRequest) {
  // Your logic
}

更新异步 API:

// Search codebase for:
// - params.
// - searchParams.
// - cookies()
// - headers()
// - draftMode()

// Add await before each
4. 全面测试
# Development
npm run dev  # Should use Turbopack automatically

# Production build
npm run build  # Should be 2-5× faster

# Run tests
npm test
5. 部署
# Verify Node.js version in production
# Deploy to Vercel/platform
# Monitor for errors in first 24h

🎯 最佳实践

1. 使用 Next.js 16 启动新项目
npx create-next-app@latest my-app
# Automatically uses Next.js 16, Turbopack, TypeScript, Tailwind
2. 策略性地使用 "use cache"
// ✅ Good: Cache expensive, infrequent-changing data
async function MonthlyReport() {
  'use cache';
  return await generateReport();
}

// ❌ Bad: Don't cache user-specific real-time data
async function CurrentBalance() {
  'use cache';  // Wrong! This should be fresh
  return await getUserBalance();
}
3. 监控构建性能
# Next.js 16 shows detailed timing
npm run build

# Example output:
Route (app)                              Size     First Load JS
┌ ○ /                                   142 B          87.2 kB
├ ○ /_not-found                         142 B          87.2 kB
└ ○ /dashboard                          1.23 kB        88.4 kB

Build time: 14.2s  # Was 57s in Next.js 15 with Webpack
4. 善用 DevTools MCP
  • 使用支持 MCP 的 Claude Code / Cursor
  • 让 AI Agent 读取 Next.js 内部实现
  • 提问:“为什么我的页面很慢?”——Agent 可以查看服务端日志
5. 为大型应用启用 React Compiler
// Only if you have performance issues
reactCompiler: true

📊 何时升级(决策矩阵)

✅ 如果符合以下情况,请立即升级:
  • 启动新项目(从第一天起就使用 16)
  • 小型或中型代码库(<50 个路由)
  • 使用 Vercel(已测试的平台)
  • 希望构建速度提升 2-5×
  • 需要即时导航(Cache Components)
⏳ 如果符合以下情况,请等待 1-2 周:
  • 大型生产应用(>100 个路由)
  • 大量使用 middleware.ts(需要迁移到 proxy.ts)
  • 自定义 Webpack 配置
  • 第三方库尚未兼容
  • 部署策略倾向于规避风险
🚫 如果符合以下情况,请暂缓升级:
  • 使用 AMP 页面(已在 16 中移除)
  • 受限于 Node.js 18(无法升级)
  • 自定义构建流水线(需要测试适配器)
  • 在生产环境中使用实验性功能

🔗 资源


💡 快速参考

安装
npm install next@latest react@latest react-dom@latest
启用功能
// next.config.ts
const nextConfig = {
  cacheComponents: true,           // Cache Components
  reactCompiler: true,             // React Compiler
  experimental: {
    turbopackFileSystemCacheForDev: true,  // Faster dev restarts
  },
};
迁移检查清单
  • 已安装 Node.js 20.9+
  • 执行 npm install next@latest
  • 运行 npx @next/codemod@canary upgrade latest
  • 将 middleware.ts 重命名为 proxy.ts
  • 为 params/searchParams/cookies/headers 添加 await
  • 使用 cacheLife 更新 revalidateTag() 调用
  • 测试构建:npm run build
  • 测试开发环境:npm run dev
  • 先部署到预发布环境

总结: Next.js 16 实现了 15 承诺的改进——一切都更快、更明确,也已做好生产就绪准备。Turbopack 成为默认选项,缓存行为可预测,AI 工具原生集成。这是 2025 年构建现代 SaaS 应用的理想版本。

评论

支持 Markdown