路由
道格龙(Docusaurus)的路由系统遵循单页应用(SPA)的约定:一个路由,一个组件。在本章节中,我们将首先探讨三个内容插件(文档、博客和页面)内部的路由机制,然后进一步讨论其底层的路由系统。
内容插件中的路由
每个内容插件都提供一个 routeBasePath
选项。它定义了插件将其路由附加到的位置。默认情况下,文档插件将其路由置于 /docs
下;博客插件置于 /blog
下;而页面插件则置于 /
下。你可以这样理解路由结构:
任何路由都会对照这个嵌套的路由配置进行匹配,直到找到一个合适的匹配项。例如,当给定一个路由 /docs/configuration
时,道格龙(Docusaurus)首先进入 /docs
分支,然后在文档插件创建的子路由中进行搜索。
更改 routeBasePath
可以有效 地改变你网站的路由结构。例如,在纯文档模式中,我们提到为文档配置 routeBasePath: '/'
意味着文档插件创建的所有路由都不会有 /docs
前缀,但这并不妨碍你拥有像 /blog
这样由其他插件创建的更多子路由。
接下来,让我们看看这三个插件是如何构建它们各自的"子路由盒子"的。
页面路由
页面路由非常直接:文件路径直接映射到 URL,没有其他自定义方式。更多信息请参阅页面文档。
Markdown 页面使用的组件是 @theme/MDXPage
。React 页面则直接用作路由的组件。
博客路由
博客会创建以下路由:
- 博文列表页:
/
,/page/2
,/page/3
...- 该路由可通过
pageBasePath
选项进行自定义。 - 组件是
@theme/BlogListPage
。
- 该路由可通过
- 博文页:
/2021/11/21/algolia-docsearch-migration
,/2021/05/12/announcing-docusaurus-two-beta
...- 由每篇 Markdown 博文生成。
- 路由可通过
slug
front matter 进行完全自定义。 - 组件是
@theme/BlogPostPage
。
- 标签列表页:
/tags
- 该路由可通过
tagsBasePath
选项进行自定义。 - 组件是
@theme/BlogTagsListPage
。
- 该路由可通过
- 标签页:
/tags/adoption
,/tags/beta
...- 通过每篇博文 front matter 中定义的标签生成。
- 路由的基地址始终由
tagsBasePath
定义,但子路由可通过标签的permalink
字段进行自定义。 - 组件是
@theme/BlogTagsPostsPage
。
- 归档页:
/archive
- 该路由可通过
archiveBasePath
选项进行自定义。 - 组件是
@theme/BlogArchivePage
。
- 该路由可通过
文档路由
文档是唯一一个创建嵌套路由的插件。在顶层,它会注册版本路径(version paths):/
, /next
, /2.0.0-beta.13
... 这些路径提供了版本上下文,包括布局和侧边栏。这确保了在切换单个文档时,侧边栏的状态得以保留,并且你可以通过导航栏的下拉菜单在不同版本之间切换,同时停留在同一个文档上。使用的组件是 @theme/DocPage
。
单个文档会在 DocPage
组件提供了导航栏、页脚、侧边栏等所有元素后的剩余空间中进行渲染。例如,当前这个页面 /docusaurus/advanced/routing
,就是由 ./docs/advanced/routing.md
处的 文件生成的。使用的组件是 @theme/DocItem
。
文档的 slug
front matter 可以自定义路由的最后一部分,但基础路由始终由插件的 routeBasePath
和版本的 path
定义。