Back返回博客

Next.js 15.3 版本发布

Next.js 15.3 包含构建工具 Turbopack、新的客户端埋点与导航钩子等多项更新。

Next.js 15.3 包含以下重要更新:

立即升级,或通过以下命令新建项目:

终端
# 使用自动化升级工具
npx @next/codemod@canary upgrade latest
 
# 或手动升级
npm install next@latest react@latest react-dom@latest
 
# 或创建新项目
npx create-next-app@latest

Turbopack 构建支持 (alpha)

next dev --turbopack 稳定版发布后,超过 50% 的 Next.js 15 开发会话已在使用 Turbopack。

本次更新包含 next build --turbopackalpha 版本,将本地开发的性能优势延伸至生产构建。

升级至 15.3 后可通过以下命令体验:

终端
next build --turbopack

功能支持

当前 next build集成测试通过率达 99.3%。您可通过 areweturboyet.com 追踪进度。若您的应用已兼容 dev 模式的 Turbopack,则无需修改即可用于生产构建。

Turbopack 构建目前处于 alpha 阶段,不建议在关键生产环境使用。您可在预览/测试环境或本地构建中观察打包体积与性能差异。

我们正通过作用域提升、分块优化等技术持续缩小性能差距。

构建性能

在 Vercel 大型单体仓库与早期合作伙伴代码库中的测试表明,Turbopack 架构相比原 Webpack 方案能随 CPU 核心数增加线性提升性能:

  • 4 核:比 Webpack 快 28%
  • 16 核:比 Webpack 快 60%
  • 30 核:比 Webpack 快 83%

结合实验性持久化缓存技术,构建时间可进一步缩短。我们将在后续版本中公布更多细节。

生态兼容

我们正与 Sentry 等常用工具合作确保其兼容 next build --turbopack。工具开发者可通过 @leerob on X 联系我们进行适配。

反馈渠道

欢迎通过以下渠道提交使用反馈:

稳定版 Turbopack 配置(next.config.ts

Turbopack 配置已从 experimental.turbo 迁移至顶层 turbopack 键:

next.config.ts
import type { NextConfig } from 'next';
 
const nextConfig: NextConfig = {
  turbopack: {
    rules: {
      '*.svg': {
        loaders: ['@svgr/webpack'],
        as: '*.js',
      },
    },
  },
};
 
export default nextConfig;

为保持兼容性,experimental.turbo 配置将持续支持至 Next.js 下个主版本。

完整配置选项请参阅 Turbopack API 文档

社区版 Rspack 支持(实验性)

Rspack 团队已为 Next.js 开发社区插件。

该方案为需要 Webpack API 完全兼容但暂无法迁移至 Turbopack 的用户提供了编译加速方案。我们将继续为 Webpack 用户提供渐进式迁移路径。

此插件虽非官方维护,但我们正与 Rspack 团队合作,在 SWC 和 Lightning CSS 等底层工具上共享技术成果。当前测试通过率约 96%。

查看示例 或查阅 Rspack 文档

客户端埋点钩子

通过根目录下的 instrumentation-client.js|ts 文件,可在应用前端代码执行前注入监控与分析逻辑:

instrumentation-client.js
// 性能监控
performance.mark('app-init');
 
// 分析工具初始化
console.log('Analytics initialized');
 
// 错误追踪
window.addEventListener('error', (event) => {
  // 上报至错误监控服务
  reportError(event.error);
});

文件位置规则与服务端埋点相同。

详见 instrumentation-client 文件文档

导航钩子

Next.js 15.3 引入的新导航钩子增强了客户端路由控制能力:

onNavigate

作为 Link 组件的新属性,该事件处理器专为单页应用(SPA)导航设计,可通过 preventDefault() 取消导航,适用于实现转场动画、路由守卫或精准的导航分析。

与通用 onClick 不同,onNavigate 仅在实际页面跳转时触发。

详见 onNavigate 文档

useLinkStatus

该客户端组件钩子返回的 pending 布尔值可标识导航状态,其设计灵感来自 React 的 useFormStatus,特别适用于预取禁用或缺少加载状态的场景。

<Link> 组件嵌套结构中,可通过该钩子创建响应式加载指示器。

详见 useLinkStatus 文档

TypeScript 插件性能优化

Next.js TypeScript 语言服务插件(LSP)现已显著提速。

该插件提供包括服务端/客户端边界校验、组件属性提示、配置自动补全等智能感知功能。在超大型代码库中,优化后的插件响应速度提升约 60%,且不再出现冻结或崩溃问题。

其他变更

  • [新增] 支持在 images.remotePatterns 中使用 new URL() (#77692)
  • [新增] 视口配置现与 metadata 分离 (#77427)
  • [新增] 添加 unstable_dynamicOnHover 选项 (#77866)
  • [新增] 支持 Pinterest Rich Pins (#76988)
  • [优化] 路由处理器中 redirect 后的 revalidate 生效 (#77090)
  • [优化] 服务端操作中 revalidate 的强一致性保证 (#76885)
  • [优化] 升级 sharp 加速 PNG 转 AVIF (#77839)

贡献者

Next.js 由 3000+ 开发者共同打造。本版本特别感谢:

  • Next.js 团队成员(名单略)
  • Turbopack 团队成员(名单略)
  • 文档团队成员(名单略)

同时感谢所有社区贡献者(名单略)的鼎力支持!