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.jscanary
版本。如果迁移时遇到问题,请暂时保持当前版本,我们将在稳定版本之前提供迁移指南。
改进的缓存 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 和配置已被移除(如
useAmp
、export const config = { amp: true }
)。next lint
命令:已弃用next lint
命令,建议直接使用 Biome 或 ESLint。next build
不再运行 linting。提供了一个 codemod:npx @next/codemod@canary next-lint-to-eslint-cli .
devIndicators
选项:已移除appIsrStatus
、buildActivity
、buildActivityPosition
等配置项。指示器仍然存在。serverRuntimeConfig
、publicRuntimeConfig
:建议使用环境变量(.env
文件)。