约定式路由

什么是约定式路由

Rspress 使用的是文件系统路由,页面的文件路径会简单的映射为路由路径,这样会让整个项目的路由非常直观。

例如,如果在 docs 目录中有一个名为 foo.md 的文件,则该文件的路由路径将是 /foo

映射规则

Rspress 会自动扫描根目录和所有子目录,并将文件路径映射到路由路径。例如,如果你有以下的文件结构:

  1. docs
  2. ├── foo
  3. └── bar.md
  4. └── foo.md

那么 bar.md 的路由路径会是 /foo/barfoo.md 的路由路径会是 /foo

具体映射规则如下:

文件路径 路由路径
index.md /
/foo.md /foo
/foo/bar.md /foo/bar
/zoo/index.md /zoo/

组件路由

在约定式路由中,除了 .md(x) 文件,还可以使用 .tsx 文件作为路由组件,在 .tsx 中默认导出一个组件,该组件会被自动注册到路由中。例如:

foo.tsx

  1. export default () => {
  2. return <div>foo</div>;
  3. };

当然,如果你想要定制布局,可以添加一个导出,声明布局类型,例如:

foo.tsx

  1. export const frontmatter = {
  2. // 声明布局类型
  3. // 这里的 custom 布局中不会出现侧边栏
  4. pageType: 'custom',
  5. };

各个 pageType 的含义详情请参考 API 文档

自定义行为

如果要自定义路由行为,可以使用配置文件中的 route 字段。例如:

rspress.config.ts

  1. import { defineConfig } from 'rspress/config';
  2. export default defineConfig({
  3. route: {
  4. // These files will be excluded from the routing (support glob pattern)
  5. exclude: ['component/**/*']
  6. // These files will be included in the routing (support glob pattern)
  7. include: ['other-dir/**/*'],
  8. }
  9. });

最佳实践

我们推荐你将文档文件放在 docs 目录下,这样可以让你的项目更加清晰。而对于非文档内容,比如自定义组件、工具函数等,可以放到 docs 目录之外进行维护。比如:

  1. docs
  2. └── foo.mdx
  3. src
  4. ├── components
  5. └── CustomComponent.tsx
  6. └── utils
  7. └── utils.ts