Next.js 项目结构

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

顶层文件夹

app应用路由 (App Router)
pages页面路由 (Pages Router)
public待托管的静态资源
src可选的应用程序源码目录

顶层文件

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

app 路由约定

路由文件

layout.js .jsx .tsx布局文件
page.js .jsx .tsx页面文件
loading.js .jsx .tsx加载状态 UI
not-found.js .jsx .tsx404 页面 UI
error.js .jsx .tsx错误页面 UI
global-error.js .jsx .tsx全局错误 UI
route.js .tsAPI 端点
template.js .jsx .tsx可重渲染的布局
default.js .jsx .tsx并行路由的备用页面

嵌套路由

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

动态路由

[folder]动态路由片段
[...folder]全捕获路由片段
[[...folder]]可选全捕获路由片段

路由组与私有文件夹

(folder)不影响路由的分组文件夹
_folder将文件夹及其子片段排除在路由系统外

并行与拦截路由

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

元数据文件约定

应用图标

favicon.ico网站图标文件
icon.ico .jpg .jpeg .png .svg应用图标文件
icon.js .ts .tsx动态生成的应用图标
apple-icon.jpg .jpeg, .pngApple 应用图标文件
apple-icon.js .ts .tsx动态生成的 Apple 应用图标

Open Graph 与 Twitter 图片

opengraph-image.jpg .jpeg .png .gifOpen Graph 图片文件
opengraph-image.js .ts .tsx动态生成的 Open Graph 图片
twitter-image.jpg .jpeg .png .gifTwitter 图片文件
twitter-image.js .ts .tsx动态生成的 Twitter 图片

SEO

sitemap.xml站点地图文件
sitemap.js .ts动态生成的站点地图
robots.txtRobots 文件
robots.js .ts动态生成的 Robots 文件

pages 路由约定

特殊文件

_app.js .jsx .tsx自定义 App
_document.js .jsx .tsx自定义 Document
_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可选全捕获路由片段

On this page