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 版本。