2025年2月26日 星期三
Next.js 15.2
作者Next.js 15.2 為錯誤帶來更優異的除錯體驗。我們很高興推出
- 重新設計的錯誤 UI & 改善的堆疊追蹤:重新設計的除錯體驗。
- 串流 Metadata:非同步 metadata 不再會阻擋頁面渲染或客戶端頁面轉換。
- Turbopack 效能提升:我們顯著提升了 Turbopack 的效能。
- React 視圖轉換 (實驗性功能):支援 React 全新實驗性的視圖轉換 API。
- Node.js 中介層 (實驗性功能):實驗性支援於中介層中使用 Node.js 執行環境。
今天就升級,或從以下開始
# Use the automated upgrade CLI
npx @next/codemod@canary upgrade latest
# ...or upgrade manually
npm install next@latest react@latest react-dom@latest
# ...or start a new project
npx create-next-app@latest
重新設計的錯誤 UI & 改善的堆疊追蹤
我們很高興宣布,針對您在建置應用程式時可能遇到的錯誤,在視覺和品質上都有所提升。讓我們逐步了解各方面的改進
錯誤覆蓋層


我們徹底改造了 Next.js 中錯誤訊息的 UI 和呈現方式,使其更容易理解。新的設計突顯了錯誤的核心細節,例如訊息、相關的程式碼框架和呼叫堆疊,同時減少了來自函式庫或相依性程式碼的雜訊。這表示您可以快速找到問題的根源並更快開始修復。
運用 React 中新引入的 owner stacks 功能,我們現在能夠更精確地提供錯誤來源的資訊。Next.js 現在能夠顯示負責拋出錯誤的子元件,跳過與造成錯誤元素無關的中介元素。
我們也讓使用者更容易自訂指示器偏好設定,而無需新增額外的設定。


我們在錯誤覆蓋層底部新增了意見回饋區塊,讓您可以評價錯誤訊息的實用程度。您的意見有助於我們了解常見的痛點,並改進錯誤訊息,讓除錯更輕鬆。
開發指示器
我們已將開發資訊整合到一個新的、精簡的指示器中,該指示器會顯示渲染模式和建置狀態等詳細資訊。
在編譯期間,當您在路由之間導航時,您會注意到一個變暗的動畫 Next.js 標誌。一旦編譯完成且 React 開始渲染,標誌就會變亮,從而提供應用程式狀態的視覺提示。
現在開啟開發指示器會顯示
- 您目前路由的渲染模式 (靜態/動態)
- Turbopack 編譯狀態
- 作用中的錯誤,可快速存取錯誤覆蓋層
未來的更新將擴展此選單以包含
- PPR (部分預先渲染) 除錯工具
- 快取監控功能
- 額外的開發者工具
這種統一的方法將所有關鍵的開發資訊放在一個易於存取的位置。我們將根據您的意見回饋,在未來的版本中繼續改進和擴展此功能。
串流 Metadata
通常有時候需要在 generateMetadata
中提取動態資料或執行一些非同步操作。在舊版本的 Next.js 中,此 metadata 需要完成產生後,才會傳送初始 UI,以便將其包含在文件 <head>
中。
這表示對於許多具有快速初始 UI 的頁面,初始渲染仍然會因資料需求而延遲,但這些資料需求實際上不會影響使用者在視覺上看到的內容。我們在 15.2 中改進了這一點,允許在 generateMetadata
完成之前,就先將初始 UI 傳送到瀏覽器。
然而,為了保持與期望 metadata 在文件 <head>
中可用的機器人和爬蟲程式的相容性,我們仍然會延遲將 HTML 傳送給某些機器人使用者代理程式。如果您需要更精細地控制哪些機器人會受到這種處理,您可以透過 next.config.js
中的 htmlLimitedBots
選項來自訂用於服務它們的 regex。
深入了解串流 metadata。
Turbopack 效能提升
Turbopack 已在 Next.js 15 中標記為穩定版。
我們一直致力於提升 Turbopack 的效能,尤其是在沒有持久快取的場景中。在此版本中,我們推出了以下增強功能
- 更快的編譯時間: 早期採用者回報,與 Next.js 15.1 相比,在存取路由時,編譯時間最多加快了 57.6%。
- 降低記憶體用量: 對於 vercel.com 應用程式,我們觀察到在本地開發期間記憶體用量減少了 30%。
透過這些改進,Turbopack 現在在幾乎所有情況下都應該比 Webpack 更快。如果您遇到應用程式並非如此的情況,請與我們聯繫——我們想要調查這些情況。
我們在持久快取和生產版本建置方面也取得了進展。雖然這些功能尚未準備好發布實驗性版本,但我們已開始在真實專案中測試它們。一旦它們可以更廣泛地使用,我們將分享更詳細的指標。
React 視圖轉換 (實驗性功能)
我們新增了一個功能標誌,以啟用 React 中全新的實驗性視圖轉換 API。這個新的 API 讓您可以在應用程式中的不同視圖和元件之間製作動畫。
若要啟用此功能,請將以下內容新增至您的 next.config.js
module.exports = {
experimental: {
viewTransition: true,
},
};
注意: 此功能為高度實驗性,未來版本可能會有所變更。
有關如何使用此功能的更多資訊,請參閱 React 儲存庫中的 原始視圖轉換 PR。隨著穩定性的進展,我們將發布更多文件和範例。
Node.js 中介層 (實驗性功能)
我們一直致力於開發一個新的實驗性標誌,以允許將 Node.js 執行環境用於 Next.js 中介層。
若要啟用此功能,請將以下內容新增至您的 next.config.js
module.exports = {
experimental: {
nodeMiddleware: true,
},
};
然後您可以在中介層 config
輸出中指定 Node.js 執行環境
import bcrypt from 'bcrypt';
const API_KEY_HASH = process.env.API_KEY_HASH; // Pre-hashed API key in env
export default async function middleware(req) {
const apiKey = req.headers.get('x-api-key');
if (!apiKey || !(await bcrypt.compare(apiKey, API_KEY_HASH))) {
return new Response('Forbidden', { status: 403 });
}
console.log('API key validated');
}
export const config = {
runtime: 'nodejs',
};
注意: 此功能尚未建議用於生產環境。因此,除非您使用的是
next@canary
版本而不是穩定版本,否則 Next.js 會拋出錯誤。
我們計劃藉此機會改進和重塑中介層 API。如果您有任何建議或要求,請告訴我們。這是社群最希望的功能之一,我們很高興能提供解決方案。
即將推出
- "use cache" (beta 版):我們一直致力於內部測試和穩定
"use cache"
作為獨立功能。敬請關注未來版本中的更多詳細資訊。深入了解"use cache"
。 - Turbopack 持久快取 (實驗性功能):我們一直在 Vercel 內部測試持久快取,並獲得了正面的效能提升。一旦我們進一步穩定它,我們將在功能標誌後發布它,以徵求更多意見回饋和測試。
其他變更
- [功能] 新增
--api
標誌,以使用create-next-app
建立無頭 API 專案 (PR) - [功能] 新增對
next/image
的images.qualities
支援 (PR) - [棄用] 針對 App Router 中 i18n 設定的棄用發出警告 (PR)
- [改進] 提升
no-html-link-for-pages
的 lint 效能 (PR) - [改進] 如果
"use action"
指令使用不正確,則發出建置錯誤 (PR) - [改進] 在開發期間,將
global-error
與開發覆蓋層一起顯示 (PR) - [改進] 允許在開發伺服器中停用 HTTP 請求記錄 (PR)
- [改進] 新增分頁 SEO 連結標籤 (PR)
- [改進] 改善
metadata
和<Link>
元件的 JSDoc (PR) - [改進] 中介層應比對
next/image
請求 (PR) - [改進] 將主機名稱新增至預設錯誤邊界訊息 (PR)
- [改進] 透過
reportError
傳送未由明確錯誤邊界處理的錯誤 (PR)
貢獻者
Next.js 是超過 3,000 位個別開發者共同努力的成果。此版本由以下人員為您帶來
- Next.js 團隊: Andrew、 Hendrik、 Janka、 Jiachi、 Jimmy、 Jiwon、 JJ、 Josh、 Jude、 Sam、 Sebastian、 Sebbie、 Wyatt 和 Zack。
- Turbopack 團隊: Benjamin、 Donny、 Maia、 Niklas、 Tim、 Tobias 和 Will。
- Next.js 文件團隊: Delba、 Rich、 Ismael 和 Lee。
衷心感謝 @ijjk、@unstubbable、@bgw、@gnoff、@eps1lon、@ztanner、@mischnic、@Marukome0743、@leerob、@gaojude、@lubieowoce、@acdlite、@kdy1、@JamBalaya56562、@creationix、@noreiller、@samcx、@delbaoliveira、@styfle、@abdonrd、@ollyw、@wyattjoh、@devjiwonchoi、@aymericzip、@davidhu2000、@attilarepka、@devpla、@dydals3440、@huozhi、@wbinnssmith、@suu3、@PapatMayuri、@Sahil4883、@abyii、@molebox、@sokra、@maciej-ka、@abvthecity、@damiensedgwick、@alitas、@RiskyMH、@ytreister、@sommeeeer、@n1ckoates、@yongholeeme、@spidersouris、@gurkerl83、@cassiossantos、@Netail、@tknickman、@eur00t、@cseas、@nnnnoel、@timneutkens、@Manoj-M-S、@lfades、@sebmarkbage、@matmannion、@mikeboensel、@nphmuller、@apostolos、@k15a、@pavelee、@locothedev、@vexcat、@Zach-Jaensch、@decepulis、@gadcam、@lukahartwig、@jsanford8、@RobinMalfait、@raunofreiberg、@mohsen1、@skushagra、@feedthejim、@amannn、@HQidea、@jrandolf、@smit-err、@littledivy、@k35o、@martinsione、@CvX、@msereniti、@Timer、@Iftee97、@chibicode、@RobPruzan、@padmaia、@PlagueFPS、@bjunix、@maximevtush、@michaelven、@sedlukha、@johannpinson、@AxelUser、@Nayeem-XTREME、@IcaroG、@blurrah、@lachlanjc、@ashi009、@conico974、@raphaelcosta、@dulmandakh、@khuezy、@Knoa0405、@wangsijie、@stefanprobst、@wentsul、@loopy-lim、@bratvanov、@hedgeday 和 @cassian-goode 的協助!