项目结构
本页概述了 Next.js 项目的文件和文件夹结构. 内容包括顶层文件和文件夹, 配置文件, app 目录和 pages 目录的路由约定.
Top-level folders (顶层文件夹)
| 文件夹名 | 简述 |
|---|---|
| app | App router |
| pages | Pages Router |
| public | 静态资源 |
| src | 可选的应用程序源文件夹 |
Top-level files (顶层文件)
| 文件名 | 简述 |
|---|---|
| next.config.js | Next.js 的配置文件 |
| package.json | 项目依赖和脚本 |
| instrument.ts | OpenTelemetry and Instrumentation file |
| middleware.ts | Next.js 请求中间件 |
| .env | 环境变量 |
| .env.local | 本地环境变量 |
| .env.production | 生产环境变量 |
| .env.development | 开发环境变量 |
| .eslintrc.json | ESLint 的配置文件 |
| .gitignore | Git 文件, 用以忽略文件和文件夹 |
| next-env.d.ts | Next.js 内的 Typescript 声明文件 |
| tsconfig.json | Typescript 的配置文件 |
| jsconfig.json | Javascript 的配置文件 |
app Routing Conventions (app Routing 协定)
Routing Files (路由文件)
| 文件名 | 后缀名 | 简述 |
|---|---|---|
| layout | .js | .jsx | .tsx | 布局 |
| page | .js | .jsx | .tsx | 页面 |
| loading | .js | .jsx | .tsx | 加载中 UI |
| not-found | .js | .jsx | .tsx | 路由未找到时的 UI |
| error | .js | .jsx | .tsx | 路由加载错误时的 UI |
| global-error | .js | .jsx | .tsx | 全局下, 路由加载错误时的 UI |
| route | .js | .jsx | API 接口 |
| template | .js | .jsx | .tsx | 预渲染布局 |
| default | .js | .jsx | .tsx | 并行路由的 fallback page(应变页面) |
Nested Routes (嵌套路由)
| 文件名 | 简述 |
|---|---|
| folder | 路由片段 |
| folder/folder | 嵌套的路由片段 |
Dynamic Routes (动态路由)
| 文件名 | 简述 |
|---|---|
| [folder] | 动态路由片段 |
| [...folder] | 捕获所有的路由段 |
| [[...folder]] | 选择性的捕获所有的路由段 |
Routes Groups and Private Folders (路由组和私有文件夹)
| 文件名 | 简述 |
|---|---|
| (folder) | 不影响路由的路由组 |
| _folder | 可选的文件夹, 所有的子文件/文件夹都被路由排除在外 |
Parallel and Intercepted Routes (平行路由和拦截路由)
| 文件名 | 简述 |
|---|---|
| @folder | 命名插槽 |
| (.)folder | 拦截同一水平路由 |
| (..)folder | 拦截上一级路由 |
| (..)(..)folder | 拦截上两级路由 |
| (...)folder | 由根路由开始拦截 |
Metadata File Convention (元文件协定)
App Icons (应用图标)
| 文件名 | 后缀名 | 简述 |
|---|---|---|
| favicon | .ico | Favicon 文件 |
| icon | .ico | .jpg | .jpeg | .png | .svg | App Icon 文件 |
| icon | .js | .ts | .tsx | 生成的 App Icon 文件 |
| apple-icon | .jpg | .jpeg | .png | Apple App |
| apple-icon | .js | .ts | .tsx | 生成的 Apple App Icon 文件 |
Open Graph and Twitter Images
| 文件名 | 后缀名 | 简述 |
|---|---|---|
| opengraph-image | .jpg | .jpeg | .png | .gif | Open Graph image file |
| opengraph-image | .js | .ts | .tsx | Generated Open Graph image |
| twitter-image | .jpg | .jpeg | .png | .gif | Twitter 图片文件 |
| twitter-image | .js | .ts | .tsx | 生成的 Twitter 图片 |
SEO
| 文件名 | 后缀名 | 简述 |
|---|---|---|
| sitemap | .xml | Sitemap file |
| sitemap | .js | .ts | Generated Sitemap |
| robots | .txt | Robots file |
| robots | .js | .ts | Generated Robots file |
pages Routing Convention (pages Router 协定)
Special Files (特殊文件)
| 文件名 | 后缀名 | 简述 |
|---|---|---|
| _app | .js | .ts | .tsx | 自定义的 App 文件 |
| _document | .js | .ts | .tsx | 自定义的 Document 文件 |
| _error | .js | .ts | .tsx | 自定义的, 错误出现时页面 |
| 404 | .js | .ts | .tsx | 404 错误出现时的页面 |
| 500 | .js | .ts | .tsx | 500 错误出现时的页面 |
Routes (路由)
Folder convention (文件夹方式)
| 文件/文件夹名 | 后缀名 | 简述 |
|---|---|---|
| index | .js | .ts | .tsx | 主页 |
| folder/index | .js | .ts | .tsx | 嵌套页面 |
File convention(文件方式)
| 文件/文件夹名 | 后缀名 | 简述 |
|---|---|---|
| index | .js | .ts | .tsx | 主页 |
| file | .js | .ts | .tsx | 嵌套页面 |
Dynamic Routes (动态路由)
Folder convention (文件夹方式)
| 文件/文件夹 | 后缀名 | 简述 |
|---|---|---|
| [folder]/index | .js | .ts | .tsx | 动态路由片段 |
| [...folder]/index | .js | .ts | .tsx | 捕获所有的路由片段 |
| [[...folder]]/index | .js | .ts | .tsx | 可选的, 捕获所有的路由片段 |
File convention (文件方式)
| 文件/文件夹 | 后缀名 | 简述 |
|---|---|---|
| [file] | .js | .ts | .tsx | 动态路由片段 |
| [...file] | .js | .ts | .tsx | 捕获所有的路由片段 |
| [[...file]] | .js | .ts | .tsx | 可选的, 捕获所有的路由片段 |