Next.js 学习笔记(二)——项目结构

139 阅读3分钟

Next.js 项目结构

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

顶级文件夹

文件夹名描述
appApp Router
pagesPages Router
public待服务的静态资源
src可选的应用程序源文件夹

顶级文件

文件名描述
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 .tsAPP 端点
template.js .jsx .tsx重新渲染布局
default.js .jsx .tsx并行路由回退页面

嵌套路由

路径描述
folder路由段
folder/folder嵌套路线段

动态路由

文件夹名描述
[folder]动态路由段
[...folder]捕捉所有路由段
[[...folder]]可选的捕捉所有路由段

路由组和私有文件夹

文件夹名描述
(folder)在不影响路由的情况下分组路由
_folder选择文件夹和所有子段暴漏路由

平行和拦截路线

文件夹名描述
@folder命名插槽
(.)folder拦截同级
(..)folder拦截上一级
(..)(..)folder拦截上两级
(...)folder从根开始拦截

元数据文件约定

App 图标

文件名文件类型描述
favicon.ico图标文件
icon.ico .jpg .jpeg .png .svgApp 图标文件
icon.js .ts .tsx生成的 App 图标
apple-icon.jpg .jpeg .png苹果 App 图标文件
apple-icon.js .ts .tsx生成的苹果 App 图标

开放图谱和推特图像

文件名文件类型描述
opengraph-image.jpg .jpeg .png .gif开放图谱图像文件
opengraph-image.js .ts .tsx生成的开放图图像
twitter-image.jpg jpeg .png .gif推特图像文件
twitter-image.js .ts .tsx生成的推特图片

搜索引擎优化(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可选的捕获所有路由段