Next.js v16.2.7:修掉了开发缓存失效和 Playwright 测试卡死的问题

2026-06-02 19 预计阅读时间:1 分钟
来源:oschina.net AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:5 分钟

Next.js v16.2.7 是一个纯 backport 修复版本,没有新功能,只把 Canary 分支里已经验证过的几个 bug 修到了稳定线。如果你在 v16.2.x 上遇到过开发模式下缓存加载报错、或者 Playwright 测试莫名卡住,这个版本直接解决这些问题。

开发模式下 HTTP 缓存页加载失败

这个 bug 的表现:在 next dev 下,某些通过浏览器 HTTP 缓存返回的页面会触发缓存加载失败,导致页面白屏或报错。根源在于开发服务器对缓存响应的处理逻辑有缺陷,把本该正常复用的缓存内容误判为失效。

升级到 v16.2.7 后,开发服务器能正确识别并加载 HTTP 缓存中的页面数据,不再误报。

如果你暂时无法升级,可以在开发时临时禁用浏览器缓存来规避:

# 用 Chrome 打开 DevTools → Network 面板,勾选 "Disable cache"
# 或者启动 Chrome 时直接禁用缓存
google-chrome --disable-cache --incognito http://localhost:3000

Playwright 测试中 requestFailed 的 _finishedPromise 问题

用 Playwright 对 Next.js 页面做端到端测试时,如果请求失败(比如网络中断或服务端 500),playwright-core 内部的 _finishedPromise 没被正确 resolve,导致测试进程挂住不退出,最终超时失败。

v16.2.7 backport 了 playwright-core 的修复,确保请求失败时 promise 正常终结。升级后,你的 Playwright 测试在遇到请求失败场景时会正常抛错并退出,不再卡死。

下面是一个典型的 Playwright 测试 Next.js 页面的脚本,升级后遇到服务端错误能正常捕获:

// e2e/home.spec.js — Playwright 测试示例
const { test, expect } = require('@playwright/test');

test('首页正常加载', async ({ page }) => {
  // 监听网络请求失败事件,升级后不再卡住
  page.on('requestfailed', (request) => {
    console.log(`请求失败: ${request.url()}${request.failure()?.errorText}`);
  });

  const response = await page.goto('http://localhost:3000');

  // 正常场景:页面返回 200
  expect(response.status()).toBe(200);

  // 异常场景也能正常断言,不再因 _finishedPromise 卡死
  // expect(response.status()).toBe(500);
});

运行测试:

# 安装依赖(确保 playwright-core 版本与 Next.js 16.2.7 兼容)
npx playwright install

# 执行测试
npx playwright test e2e/home.spec.js

文档修复也进了稳定线

v16.2.7 还 backport 了文档修正(#93804)。如果你之前按官方文档踩过坑——比如某个 API 的参数说明和实际行为不一致——这次文档更新可能已经修正了描述。升级后建议对照 nextjs.org/docs 重新确认你用到的 API 说明。

升级建议

这是一个低风险的补丁版本,只修 bug,不改行为。升级方式:

# 项目根目录执行
npm install next@16.2.7

# 或
yarn add next@16.2.7

# 或
pnpm add next@16.2.7

升级后跑一遍你的 Playwright 测试和开发模式下的页面加载,确认之前的问题消失即可。不需要改动任何业务代码或配置。

注意:此版本不包含 Canary 分支中所有待发布的功能和改动。如果你在 Canary 上用了实验性特性,不要期望它们出现在 16.2.7 里。稳定线只拿回已验证的修复,功能更新等下一个 minor 版本。


相关推荐