项目组织和文件托管
除了路由文件夹和文件约定, 对于如何组织和托管项目文件,Next.js无固定观点。
本页分享可用作组织项目的默认行为和特点。
默认情况下的安全托管
app文件夹中, 嵌套文件夹层次结构定义了路由结构。
每个文件夹代表映射到相应 URL 路径中的一个段的路由段。
然而, 即使路由结构通过文件夹来定义,但是直到路由段中添加了page.js 或 route.js文件,才可公开访问路由。
而且,即使路由是可公开访问的,也只有由 page.js 或 route.js返回的内容会发送到客户端。
这意味可以在app文件夹中安全地托管项目文件,而不会意外地可通过路由访问。
您需要知道:
- 不同于
pages目录,pages下的任何文件都被看作为路由。- 即使您能够将项目文件托管在
app中,但这不是强制的。如果您愿意,您可以将它们保存在app目录外。
项目组织特色
Next.js 提供了多个特色来帮助您组织项目。
私有文件夹
可以通过创建一个带有下划线为前缀的文件夹来创建私有文件夹:_folderName
因为默认情况下可安全托管app目录中的文件,因此不需要私有文件夹托管。然而,它们可以用作:
- 将路由逻辑与 UI 逻辑分离。
- 在项目和 Next.js 生态系统中始终组织内部文件。
- 在代码编辑器中对文件进行排序和分组。
- 避免与将来的 Next.js 文件约定发生可能的命名冲突。
您需要知道
- 尽管不是框架约定, 您也可以考虑使用相同的下划线模式将私有文件夹外的文件标记为私有。
- 您能够通过将文件名带有
%5F前缀来创建以下划线开始的 URL 段。 (下划线的 URL 编码形式):%5FfolderName。- 如果您不使用私有文件夹, 了解 Next.js 特殊文件约定以预防意外的命名冲突会很有帮助。
路由组
路由组可以以圆括号包裹的文件夹来创建: (folderName)
这表示文件夹是用作组织的而不应该包含在路由的 URL 路径中。
路由组适用于:
- 分组路由 例如:按 site 部分、意图或团队。
- 在同一路由段级别中使用嵌套布局:
- 在同一路由段中创建多个嵌套 布局,包括多个根布局
- 向公共段中的路由子集添加布局
src 目录
Next.js 支持在可选的src 目录中存储应用程序代码 (包括 app) 。这将应用程序代码和大多数存在于项目根中的项目配置文件分离。
模块路径别名
Next.js 支持 模块路径别名,这使得在深度嵌套的项目文件中读取和维护导入变的更加容易。
// before
import { Button } from "../../../components/button";
// after
import { Button } from "@/components/button";
项目组织策略
在 Next.js 项目中组织您自己的文件或文件夹时,没有“正确”或“错误”的方式。
以下部分列出了常见策略的高级概述。 最简单的方法是选择一个适合您和您团队的策略,并在整个项目中保持一致。
您需要知道:在下面的示例中, 我们正在使用
components和lib文件夹作为通用占位符, 它们的命名没有特殊的框架意义,且您的项目可以使用如ui,utils,hooks,styles, 等的其它文件夹。
在"app"外存储项目文件
此策略将所有应用程序代码存储在项目根目录的共享文件夹中,并使app目录仅为路由目的。