域名 AXUM.RS 将于2025年10月到期。我们无意再对其进行续费,我们希望你能够接续这个域名,让更多 AXUM 开发者继续受益。
  • 方案1️⃣AXUM.RS 域名 = 3000
  • 方案2️⃣方案1️⃣ + 本站所有专题原始 Markdown 文档 = 5000
  • 方案3️⃣方案2️⃣ + 本站原始数据库 = 5500
如果你有意接续这份 AXUM 情怀,请与我们取得联系。
说明:
  1. 如果有人购买 AXUM.RS 域名(方案1️⃣),或者该域名到期,本站将启用新的免费域名继续提供服务。
  2. 如果有人购买了 AXUM.RS 域名,且同时购买了内容和/或数据库(方案2️⃣/方案3️⃣),本站将关闭。届时我们或许会以另一种方式与你再相遇。

约定即配置

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

什么是 App 路由

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]
  • 👉[1] :给创建的项目设置名字,本例为 axum-rs-hello-nextjs-app-router
  • 👉[2]:是否使用 TypeScript,本例为 No(不使用)
  • 👉[3]:是否使用 ESLint,本例为 No(不使用)
  • 👉[4]:是否使用 Tailwind,本例为 No(不使用,需要的时候可以手动安装,并不复杂)
  • 👉[5]:是否使用 src 目录,本例为 No(不使用)
  • 👉[6]:是否使用 App 路由,本例为 Yes(使用)
  • 👉[7]:是否为 import 定义别名,本例为 No (不定义)

显而易见,本专题就是为了讲 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
  • app 目录:项目的路由
    • app/favicon.ico:偏好图标
    • app/global.css:全局样式
    • app/layout.js:应用程序的根布局(root layout
    • app/page.js:应用程序的“首页”(root page
    • app/page.module.css:应用程序“首页”的模块化样式
  • next.config.js:Next.js 配置文件
  • public目录:公共静态资源
  • app/favicon.ico:偏好图标
  • app/global.css:全局样式
  • app/layout.js:应用程序的根布局(root layout
  • app/page.js:应用程序的“首页”(root page
  • app/page.module.css:应用程序“首页”的模块化样式

约定即配置

Next.js 的重大策略是:约定即配置,大部分功能都是通过约定而不是手动配置(比如手动修改next.config.js)来实现。其中最明显的就是路由系统。

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

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

路由文件

嵌套路由

目录名说明URL
路由1定义一个名为路由1的路由/路由1
路由1/子路由1定义一个名为子路由1的路由,它的父路由是 路由1/路由1/子路由1
目录名说明
[axum-rs]定义一个动态路由
[...axum-rs]定义一个 Catch-All 动态路由
[[...axum-rs]]定义一个可选的 Catch-All 动态路由

路由分组

目录名说明
(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仓库。

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