前端嘛 Logo
前端嘛

Next.js 16 Beta 版本预览

Next.js 16 Beta 已于 2025 年 10 月 9 日发布,带来了开发者体验、性能和架构方面的重大改进。此次版本的亮点包括:

  • Turbopack(稳定版):作为所有应用程序的默认打包器,构建速度提高 2-5 倍,Fast Refresh 提升至 10 倍。

  • Turbopack 文件系统缓存(Beta):在开发过程中存储编译器工件,实现更快的启动和编译时间,特别适用于大型项目。

  • React 编译器支持(稳定版):内置集成自动记忆化,减少不必要的重新渲染。

  • 构建适配器 API(Alpha):允许创建自定义适配器以修改构建过程。

  • 增强的路由系统:优化导航和预取,支持布局去重和增量预取。

  • 改进的缓存 API:新增 updateTag() 和优化的 revalidateTag()

  • React 19.2:引入 View Transitions、useEffectEvent()<Activity /> 等新特性。

  • 破坏性变更:异步参数、next/image 默认值等。

开发者可以通过以下方式升级至 Beta 版本:

# 使用自动升级 CLI
npx @next/codemod@canary upgrade beta

# 或手动升级
npm install next@beta react@latest react-dom@latest

# 或创建新项目
npx create-next-app@beta

🛠 开发者体验提升

Turbopack(稳定版)

Turbopack 已在开发和生产构建中达到稳定性,成为所有新 Next.js 项目的默认打包器。自今年夏季首次发布以来,采用率迅速增长:超过 50% 的开发会话和 20% 的生产构建已在 Next.js 15.3+ 中运行 Turbopack。

使用 Turbopack,您可以期待:

  • 生产构建速度提高 2–5 倍

  • Fast Refresh 提升至 10 倍

我们将 Turbopack 设为默认,以便每个 Next.js 开发者都能享受这些性能提升,无需任何配置。

Turbopack 文件系统缓存(Beta)

Turbopack 现在支持开发中的文件系统缓存,在运行之间将编译器工件存储在磁盘上,从而显著提高重新启动时的编译速度,特别适用于大型项目。

在您的配置中启用文件系统缓存:

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

export default nextConfig;

所有内部 Vercel 应用程序已经在使用此功能,我们在大型代码库中看到了显著的开发者生产力提升。

简化的 create-next-app

create-next-app 已重新设计,提供简化的设置流程、更新的项目结构和改进的默认配置。新模板默认包含 App Router、TypeScript 配置、Tailwind CSS 和 ESLint。


🔧 核心功能与架构改进

增强的路由和导航系统

Next.js 16 对路由和导航系统进行了全面改进,使页面过渡更加轻量和快速。

  • 布局去重:当预取多个具有共享布局的 URL 时,布局仅下载一次,而不是为每个链接分别下载,从而显著减少网络传输大小。

  • 增量预取:Next.js 仅预取未缓存的部分,而不是整个页面。预取缓存现在:

    • 在链接离开视口时取消请求

    • 在悬停或重新进入视口时优先预取链接

    • 在数据失效时重新预取链接

    • 与即将发布的 Cache Components 功能无缝配合

这些更改无需代码修改,旨在提高所有应用程序的性能。

PPR 和 Cache Components

Next.js 16 移除了实验性的部分预渲染(PPR)标志和配置选项。PPR 正在集成到 Cache Components 中。

从 Next.js 16 开始,您可以使用 experimental.cacheComponents 配置选择加入 PPR。Cache Components 带来了额外的功能和行为,我们将在 Next.js Conf 和 Next.js 16 稳定版本之前进行文档和公告。

如果您的应用程序依赖于 PPR(experimental.ppr = true):请继续使用当前的 Next.js canary 版本。如果迁移时遇到问题,请暂时保持当前版本,我们将在稳定版本之前提供迁移指南。

改进的缓存 API

Next.js 16 引入了优化的缓存 API,以更明确地控制缓存行为。

revalidateTag()(更新版)

revalidateTag() 现在需要将 cacheLife 配置文件作为第二个参数,以启用 stale-while-revalidate(SWR)行为:

import { revalidateTag } from 'next/cache';

// ✅ 使用内置的 cacheLife 配置文件(我们推荐 'max' 用于大多数情况)
revalidateTag('blog-posts', 'max');

// 或使用其他内置配置文件
revalidateTag('news-feed', 'hours');
revalidateTag('analytics', 'days');

// 或使用内联对象定义自定义的重新验证时间
revalidateTag('products', { revalidate: 3600 });

// ⚠️ 已弃用 - 单参数形式
revalidateTag('blog-posts');

cacheLife 配置文件接受内置的名称(如 'max''hours''days')或在 next.config 中定义的自定义配置文件。您还可以传递内联的 { revalidate: number } 对象。我们推荐使用 'max',因为它为长期内容启用了后台重新验证。


⚠️ 破坏性变更

Next.js 16 引入了一些破坏性变更,开发者应注意:

  • AMP 支持:所有 AMP API 和配置已被移除(如 useAmpexport const config = { amp: true })。

  • next lint 命令:已弃用 next lint 命令,建议直接使用 Biome 或 ESLint。next build 不再运行 linting。提供了一个 codemod:

    npx @next/codemod@canary next-lint-to-eslint-cli .
  • devIndicators 选项:已移除 appIsrStatusbuildActivitybuildActivityPosition 等配置项。指示器仍然存在。

  • serverRuntimeConfigpublicRuntimeConfig:建议使用环境变量(.env 文件)。


原文链接: https://nextjs.org/blog/next-16-beta