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