在 Next.js 14 中,文件夹命名前缀具有不同的功能含义。以下是 (xxx)、@xxx 和 .xxx 的详细区别说明:
1. (xxx) - 路由组(Route Groups)
用途:用于逻辑分组路由,不影响实际 URL 路径
特点:
- 允许将相关路由组织在一起
- 可以共享布局文件
- 不会出现在最终 URL 中
示例:
app/
(auth)/
login/page.tsx → /login
register/page.tsx → /register
(marketing)/
about/page.tsx → /about
2. @xxx - 私有文件夹(Private Folders)
用途:存放不参与路由的代码文件
特点:
- 不会生成对应的路由
- 用于组织组件、工具函数等
- 需要手动导入使用
示例:
app/
@components/
Button.tsx
@utils/
api.ts
page.tsx
3. .xxx - 拦截路由(Intercepted Routes)
用途:实现路由拦截功能
特点:
- 使用特殊前缀表示拦截层级:
(.)同级拦截(..)上一级拦截(...)根级拦截
- 用于实现模态框等交互模式
示例:
app/
photo/
[id]/page.tsx → /photo/1
feed/
(.)photo/
[id]/page.tsx → 拦截/photo/1并在/feed中显示
主要区别对比
| 类型 | 语法 | 用途 | 是否生成路由 | 典型应用场景 |
|---|---|---|---|---|
| 路由组 | (xxx) |
逻辑分组 | 否 | 组织相关路由 |
| 私有文件夹 | @xxx |
代码组织 | 否 | 存放组件/工具 |
| 拦截路由 | (.xxx) |
路由拦截 | 是 | 模态框实现 |
注意:.xxx 在文件系统中通常表示隐藏文件(如 .env),但在 Next.js 路由系统中,拦截路由使用的是 (.) 这种带圆括号的语法,而不是直接使用点号前缀。
