约定即配置

本章我们来看一下 create-next-app 的选项、目录结构以及 Next.js 的「约定即配置」。

什么是 App 路由

此前的 Next.js 使用的是 Pages 路由,即所有路由都放在 pages/ 目录。新版的 Next.js 推出了 App路由,即所有路由都放在了 app/ 目录。当然,两者还是存在一些区别的,而不是单单只是存放路由的目录不同而已。

create-next-app 选项

本专题使用 yarn create next-app 来创建 Next.js 项目,它底层调用的也是 create-next-app 命令。

What is your project named? axum-rs-hello-nextjs-app-router   👉[1]
Would you like to use TypeScript with this project? No / Yes   👉[2]
Would you like to use ESLint with this project? No / Yes  👉[3]
Would you like to use Tailwind CSS with this project? No / Yes  👉[4]
Would you like to use `src/` directory with this project? No / Yes  👉[5]
Use App Router (recommended)? No / Yes  👉[6]
Would you like to customize the default import alias? No / Yes  👉[7]

显而易见,本专题就是为了讲 App 路由,所以 👉[6] 肯定要选择 Yes

目录结构

├── app
│   ├── favicon.ico
│   ├── globals.css
│   ├── layout.js
│   ├── page.js
│   └── page.module.css
├── jsconfig.json
├── next.config.js
├── package.json
├── public
│   ├── next.svg
│   └── vercel.svg
├── README.md
└── yarn.lock

约定即配置

Next.js 使用约定的文件/目录来实现路由:(以下文件/目录均在app/目录里面)

以下内容的 *.js 可以是 *.js/*.jsx/*.ts/*.tsx,为了简化描述,本专题统一以 *.js 进行描述。

路由文件

文件名说明
layout.js布局文件
page.js“首页” UI
loading.js“正在载入” UI
not-found.js“没有找到” UI
error.js错误处理UI
global-error.js全局错误处理UI
route.jsapi的路由定义
template.js模板文件
default.js并行路由的回调页面

嵌套路由

动态路由

路由分组

目录名说明
(axum-rs)定义一个名为 axum-rs 的路由组
_axum-rs定义一个名为 axum-rs 私有目录,它及它的子路由都将无法访问

并行路由和路由拦截

目录名说明
@axum-rs定义一个名为axum-rs 的命名插槽,以便用于并行路由。
(.)axum-rs拦截同级路由
(..)axum-rs拦截上级路由
(..)(..)axum-rs拦截上2级路由
(...)axum-rs拦截根路由

SEO

文件名说明
sitemap.xml网站地图
sitemap.js或.ts生成网站地图
robots.txtRobots 文件
robots.js或.ts生成 Robots 文件

本专题代码位于AxumCourse/nextjs-app-router仓库。

要查看完整内容,请先登录