01-getting-started
Next.js 项目结构

本页面提供了 Next.js 项目文件和文件夹结构的概述。涵盖了顶层文件和文件夹、配置文件以及apppages目录中的路由约定。

顶层文件夹

app应用路由
pages页面路由
public待提供的静态资源
src可选的应用源文件夹

顶层文件

Next.js
next.config.jsNext.js 的配置文件
package.json项目的依赖和脚本
instrumentation.tsOpenTelemetry 和 Instrumentation 文件
middleware.tsNext.js 请求中间件
.env环境变量
.env.local本地环境变量
.env.production生产环境变量
.env.development开发环境变量
.eslintrc.jsonESLint 的配置文件
.gitignore忽略的 Git 文件和文件夹
next-env.d.tsNext.js 的 TypeScript 声明文件
tsconfig.jsonTypeScript 的配置文件
jsconfig.jsonJavaScript 的配置文件

app 路由约定

路由文件

layout.js .jsx .tsx布局
page.js .jsx .tsx页面
loading.js .jsx .tsx加载界面
not-found.js .jsx .tsx未找到页面
error.js .jsx .tsx错误页面
global-error.js .jsx .tsx全局错误页面
route.js .tsAPI 端点
template.js .jsx .tsx重新渲染的布局
default.js .jsx .tsx平行路由回退页面

嵌套路由

folder路由段
folder/folder嵌套路由段

动态路由

[folder]动态路由段
[...folder]匹配所有路由段
[[...folder]] (opens in a new tab)可选的匹配所有路由段

路由组和私有文件夹

(folder)组织路由,不影响路由
_folder将文件夹和所有子段移出路由

平行和拦截路由

@folder命名槽
(.)folder拦截同级
(..)folder拦截上一级
(..)(..)folder拦截上两级
(...)folder从根目录拦截

元数据文件约定

应用图标

favicon.icoFavicon 文件
icon.ico .jpg .jpeg .png .svg应用图标文件
icon.js .ts .tsx生成的应用图标文件
apple-icon.jpg .jpeg, .png苹果应用图标文件
apple-icon.js .ts .tsx生成的苹果应用图标文件

开放图和推特图片

opengraph-image.jpg .jpeg .png .gifOpen Graph 图片文件
opengraph-image.js .ts .tsx生成的 Open Graph 图片
twitter-image.jpg .jpeg .png .gif推特图片文件
twitter-image.js .ts .tsx生成的推特图片

SEO

sitemap.xmlSitemap 文件
sitemap.js .ts生成的 Sitemap
robots.txtRobots 文件
robots.js .ts生成的 Robots 文件

pages 路由约定

特殊文件

_app.js .jsx .tsx自定义应用
_document.js .jsx .tsx自定义文档
_error.js .jsx .tsx自定义错误页面
404.js .jsx .tsx404 错误页面
500.js .jsx .tsx500 错误页面

路由

文件夹约定
index.js .jsx .tsx首页
folder/index.js .jsx .tsx嵌套页面
文件约定
index.js .jsx .tsx首页
file.js .jsx .tsx嵌套页面

动态路由

文件夹约定
[folder]/index.js .jsx .tsx动态路由段
[...folder]/index.js .jsx .tsx匹配所有动态路由段
[[...folder]]/index.js .jsx .tsx可选的匹配所有动态路由段
文件约定
[file].js .jsx .tsx动态路由段
[...file].js .jsx .tsx匹配所有动态路由段
[[...file]].js .jsx .tsx可选的匹配所有动态路由段