Next.js

Next.js是一個構建於Node.js之上的開源Web開發框架，支援基於React的Web應用程序功能，例如伺服器端渲染和生成靜態網站。React於官方文件內的「推薦的工具鏈」中提及Next.js，建議將其作為「使用Node.js構建伺服器渲染網站」的解決方案。傳統的React應用程式只能在客戶端瀏覽器中渲染內容，Next.js擴充了此功能以包括在伺服器端渲染的應用程式。

Next.js的版權和商標歸Vercel（前身為ZEIT）所有，該公司也維護和主導其開放原始碼專案的開發。

## 背景

Next.js是一個基於React的框架，它支援一些額外的功能，包括伺服器端渲染和靜態網站生成。React是一組JavaScript庫，傳統上用於構建使用JavaScript在客戶端瀏覽器中渲染的網頁應用程式。然而開發者意識到這種策略存在一些問題，例如無法滿足無法訪問或禁用JavaScript的使用者、潛在的安全問題、明顯延長頁面載入時間以及可能損害網站的整體搜尋引擎優化。諸如Next.js之類的框架利用允許在發送到客戶端之前在伺服器端渲染部分或全部網站來避開這些問題。Next.js是最流行的React框架之一。它是啟動新應用程序時可用的幾個推薦「工具鏈」之一，所有這些都提供了一個抽象層來協助完成常見的任務。Next.js可以在Node.js上運行，而且可以使用npm或其他兼容的工具安裝和管理版本。Next.js也可以在其他JavaScript運行時上使用，如Bun和Deno。

Google已向Next.js專案捐款，在2019年貢獻了43個拉取請求（Pull request），協助修剪了未使用的JavaScript、減少了載入時間與增加了改進指標。截至2020年3月，該框架已被許多大型網站使用，包括Netflix、GitHub、Uber、Ticketmaster和星巴克。2020年初，Vercel宣布募得了2100萬美元的A輪融資，用來支援軟體的改進。該框架的原作者Guillermo Rauch目前是Vercel的CEO，該項目的開發主管是 Tim Neutkens。

## 發展歷程

Next.js於2016年10月25日首次在GitHub上作為開放原始碼專案發布。它最初是基於六個原則開發的：開箱即用的功能，無需設定，JavaScript無處不在，所有功能都用JavaScript編寫，自動程式碼拆分和伺服器渲染，可配置的資料獲取，預測請求和簡化部署。

Next.js 2.0於2017年3月發布，其中包括多項改善，使小型網站開發變得更加容易。還提高了構建效率並提高了熱模塊更換功能的可擴展性。

7.0版於2018年9月發布，改進了錯誤處理並支持React的上下文API以改進動態路由處理。也是第一個升級到webpack 4的版本。

8.0版於2019年2月發布，是第一個提供無伺服器應用程式部署的版本，其中程式碼被拆分為按需運行的匿名函式（Lambda function）。該版本還減少了靜態匯出所需的時間和資源，並提高了預取性能。

9.3版於2020年3月發布，包括各種優化以及全域Sass和CSS模組支持。

於2020年7月27日，Next.js 9.5版發布，增加了包括增量靜態再生（incremental static regeneration, ISR）、重新寫入和重新導向支援在內的新功能。

於2021年6月15日，Next.js第11版發布，其中包括：Webpack 5支援、實時協作編碼功能預覽「Next.js Live」，以及從Create React App自動轉換為Next.js的實驗性功能相容形式「Create React App Migration」。

2021年10月26日，Next.js 12發布，增加了Rust編譯器，使編譯速度更快，支持AVIF，Edge Functions與中介軟體，原生ESM與URL輸入。

2022年10月26日，Vercel 發布 Next.js 13，這次重大更新在beta版本帶來新的路由模式App Router，支援佈局（layouts）、React 伺服器元件（React Server Components）、串流（streaming），以及一套全新的資料擷取方法。此外，Vercel 同步公佈前端開發工具鏈Turbo，其中包含作為Webpack後繼者的Turbopack，以及用於增量建置系統的Turborepo。

2023年5月，Next.js 13.4發布，App Router 轉為穩定版本，開發者可可以在產品環境中使用。

2023年10月，Next.js 14發布，此版本透過Edge Runtime優化了記憶體管理。

2024年10月，Next.js 15發布，此版本引入了基於 Rust 語言、速度更快的打包工具Turbopack，並支援 React 19 和非同步請求 API。

## 樣式和功能

Next.js支持CSS樣式以及預編譯的SCSS和SASS、CSS-in-JS和StyledJSX。此外，它也利用TypeScript支援和智慧型捆綁構建。開放原始碼編譯器Babel用於將程式碼轉換和編譯成瀏覽器可用的JavaScript。Webpack，是另一個開放原始碼工具，用於在之後打包模組。所有這些工具都在指令終端機中與NPM一起使用。

Next.js的主要特點是使用伺服器端渲染來減輕網頁瀏覽器的負擔並提供增強安全性。這可以針對應用程式的任何部分或整個專案完成，從而允許將內容豐富的頁面單獨挑出來用於伺服器端渲染。也可以僅針對首次訪客進行，以減輕尚未下載任何網站資產的網路瀏覽器的負載。「熱重載（Hot reloading）」功能會在更改發生時偵測更改並重新渲染適當的頁面，因此伺服器也避免重新啟動。允許對應用程式的程式碼所做的更改立即反映在網頁瀏覽器中，儘管某些瀏覽器會要求重新整理。該軟體使用基於檔案系統的路由讓開發更便利，與包括對動態路由的支援。其他功能包括熱模組替換，以便可以實時替換模組，自動程式碼拆分，僅包括載入頁面所需的程式碼，以及頁面預取減少載入時間。

Next.js還支持增量靜態再生（ISR）和靜態站點生成（SSG）網站的編譯版本通常會在構建期間構建並以.next文件夾的型式儲存。當使用者提出請求時，作為靜態HTML頁面的預構建版本將被緩存並發送出去。這會使得載入時間非常快速，但它並非適合每個網站，尤其是對於經常更改並利用大量使用者輸入的互動式網站將會變得不適合。

## 安全性

2025年11月，安全研究員Lachlan Davidson向React團隊回報了一個漏洞，該漏洞允許攻擊者透過React Server Component反序列化協定中的缺陷，進行未經身份驗證的遠端程式碼執行。

12月3日，npm發佈了修正補丁，並公開揭露為CVE-2025-55182（又名為React2Shell），其CVSS評分為滿分10.0。

由於預設的App Router配置設定存在安全隱患，Next.js 15.x和16.x版本也受到此CVE的影響，並被獨立追蹤為CVE-2025-66478。亞馬遜威脅智慧團隊在漏洞公開披露後的幾個小時內，就觀察到多個與中國國家機構有關的威脅組織（Chinese state-nexus threat groups）試圖利用該漏洞進行攻擊。

12月5日，美國網路安全與基礎設施安全局（CISA）將該漏洞加入KEV（Known Exploited Vulnerabilities）目錄中。

12月6日，Vercel發布了npm套件fix-react2shell-next，用於更新為已經安全修正的版本。

## 基本資料

- 說明：The Next.js logo, a stylization of its name
- 域：Next.js logo
- 作者：Guillermo Rauch
- 開發者：Vercel 和開放原始碼社群
- 發行日期：2016年10月25日
- 軟體版本週期：Q56062435
- 程式語言：JavaScript, TypeScript and Rust
- 平台：Web platform
- 類型：Web application framework
- 許可協議：MIT License