如何从 Pages 路由迁移到 App 路由
本指南将帮助您:
升级
Node.js 版本
最低 Node.js 版本现在是 v18.17。有关更多信息,请参阅 Node.js 文档。
Next.js 版本
要更新到 Next.js 版本 13,请使用您首选的包管理器运行以下命令:
npm install next@latest react@latest react-dom@latest
ESLint 版本
如果您使用 ESLint,您需要升级 ESLint 版本:
npm install -D eslint-config-next@latest
提示: 您可能需要重启 VS Code 中的 ESLint 服务器以使 ESLint 更改生效。打开命令面板(Mac 上为
cmd+shift+p;Windows 上为ctrl+shift+p)并搜索ESLint: Restart ESLint Server。
下一步
更新后,请参阅以下部分了解下一步:
- 升级新功能:帮助您升级到新功能的指南,如改进的 Image 和 Link 组件。
- 从
pages迁移到app目录:帮助您逐步从pages迁移到app目录的分步指南。
升级新功能
Next.js 13 引入了新的 App 路由器,具有新功能和约定。新路由器在 app 目录中可用,与 pages 目录共存。
升级到 Next.js 13 不需要使用 App 路由器。您可以继续使用 pages 以及适用于两个目录的新功能,如更新的 Image 组件、Link 组件、Script 组件 和 字体优化。
<Image/> 组件
Next.js 12 引入了 Image 组件的新改进,使用临时导入:next/future/image。这些改进包括更少的客户端 JavaScript、更容易扩展和样式化图片的方法、更好的可访问性和原生浏览器懒加载。
在版本 13 中,这种新行为现在是 next/image 的默认行为。
有两个代码修改工具可以帮助您迁移到新的 Image 组件:
next-image-to-legacy-image代码修改工具:安全自动地将next/image导入重命名为next/legacy/image。现有组件将保持相同的行为。next-image-experimental代码修改工具:危险地添加内联样式并删除未使用的 props。这将更改现有组件的行为以匹配新的默认值。要使用此代码修改工具,您需要先运行next-image-to-legacy-image代码修改工具。
<Link> 组件
<Link> 组件 不再需要手动添加 <a> 标签作为子元素。此行为在 版本 12.2 中作为实验性选项添加,现在是默认行为。在 Next.js 13 中,<Link> 总是渲染 <a> 并允许您将 props 转发到底层标签。
例如:
import Link from 'next/link'
// Next.js 12:`<a>` 必须嵌套,否则会被排除
<Link href="/about">
<a>关于</a>
</Link>
// Next.js 13:`<Link>` 总是在底层渲染 `<a>`
<Link href="/about">
关于
</Link>
要将链接升级到 Next.js 13,您可以使用 new-link 代码修改工具。
<Script> 组件
next/script 的行为已更新以支持 pages 和 app,但需要进行一些更改以确保平滑迁移:
- 将您之前在
_document.js中包含的任何beforeInteractive脚本移动到根布局文件(app/layout.tsx)。 - 实验性
worker策略在app中还不能工作,使用此策略的脚本将必须被删除或修改为使用不同的策略(例如lazyOnload)。 onLoad、onReady和onError处理程序在服务器组件中不能工作,所以请确保将它们移动到客户端组件或完全删除它们。
字体优化
以前,Next.js 通过内联字体 CSS 帮助您优化字体。版本 13 引入了新的 next/font 模块,它让 您能够自定义字体加载体验,同时仍然确保出色的性能和隐私。next/font 在 pages 和 app 目录中都受支持。
虽然内联 CSS 在 pages 中仍然有效,但在 app 中不起作用。您应该使用 next/font 代替。
请参阅字体优化页面以了解如何使用 next/font。
从 pages 迁移到 app
🎥 观看: 了解如何逐步采用 App 路由器 → YouTube(16 分钟)。
迁移到 App 路由器可能是第一次使用 Next.js 构建的 React 功能,如服务器组件、Suspense 等。当与新的 Next.js 功能(如特殊文件和布局)结合时,迁移意味着需要学习新概念、心智模型和行为变化。
我们建议通过将迁移分解为更小的步骤来减少这些更新的组合复杂性。app 目录被有意设计为与 pages 目录同时工作,以允许逐页增量迁移。
app目录支持嵌套路由 和 布局。了解更多。- 使用嵌套文件夹定义路由,使用特殊的
page.js文件使路由段公开可访问。