自动生成
Docusaurus 可以从文件系统结构自动创建一个边栏:每个文件夹创建一个边栏类别,每个文件创建一个文档链接。
type SidebarItemAutogenerated = {
type: "autogenerated";
dirName: string; // Source folder to generate the sidebar slice from (relative to docs)
};
Docusaurus 可以从你的 docs 文件夹生成一个完整的侧边栏:
module.exports = {
myAutogeneratedSidebar: [
{
type: "autogenerated",
dirName: ".", // '.' means the current docs folder
},
],
};
一个自动生成
的项目被 Docusaurus 转换为一个侧栏切片
(也在category 速记中讨论):一个类型为doc
或category
的项目列表,所以你可以从多个目录中剪切多个自动生成
的项目,将它们与常规的侧栏项目交错在一个侧栏级别。
一个现实世界的例子
考虑以下文件结构:
docs
├── api
│ ├── product1-api
│ │ └── api.md
│ └── product2-api
│ ├── basic-api.md
│ └── pro-api.md
├── intro.md
└── tutorials
├── advanced
│ ├── advanced1.md
│ ├── advanced2.md
│ └── read-more
│ ├── resource1.md
│ └── resource2.md
├── easy
│ ├── easy1.md
│ └── easy2.md
├── tutorial-end.md
├── tutorial-intro.md
└── tutorial-medium.md
假设每个文档的 ID 就是它的文件名。如果像这样定义一个自动生成的侧边栏:
module.exports = {
mySidebar: [
"intro",
{
type: "category",
label: "Tutorials",
items: [
"tutorial-intro",
{
type: "autogenerated",
dirName: "tutorials/easy", // Generate sidebar slice from docs/tutorials/easy
},
"tutorial-medium",
{
type: "autogenerated",
dirName: "tutorials/advanced", // Generate sidebar slice from docs/tutorials/advanced
},
"tutorial-end",
],
},
{
type: "autogenerated",
dirName: "api", // Generate sidebar slice from docs/api
},
{
type: "category",
label: "Community",
items: ["team", "chat"],
},
],
};
它将被分解为:
module.exports = {
mySidebar: [
"intro",
{
type: "category",
label: "Tutorials",
items: [
"tutorial-intro",
// Two files in docs/tutorials/easy
"easy1",
"easy2",
"tutorial-medium",
// Two files and a folder in docs/tutorials/advanced
"advanced1",
"advanced2",
{
type: "category",
label: "read-more",
items: ["resource1", "resource2"],
},
"tutorial-end",
],
},
// Two folders in docs/api
{
type: "category",
label: "product1-api",
items: ["api"],
},
{
type: "category",
label: "product2-api",
items: ["basic-api", "pro-api"],
},
{
type: "category",
label: "Community",
items: ["team", "chat"],
},
],
};
请注意,自动生成的源目录本身不会成为类别:只有它们包含的项才会。这就是我们所说的侧边栏切片
。
品类索引约定
Docusaurus 可以自动将一个类别链接到它的索引文档。
类别索引文档是遵循以下文件名约定之一的文档:
- 命名为
index
(case-insensitive):docs/Guides/index.md
- 命名为
README
(case-insensitive):docs/Guides/README.mdx
- 与父文件夹名称相同:
docs/Guides/Guides.md
这相当于使用带有文档链接的类别:
module.exports = {
docs: [
{
type: "category",
label: "Guides",
link: { type: "doc", id: "Guides/index" },
items: [],
},
],
};
将您的介绍性文档命名为README.md
使其在使用 GitHub 界面浏览文件夹时显示出来,而使用index.md
使行为更符合 HTML 文件的服务方式。
如果一个文件夹只有一个索引页,它将变成一个链接,而不是一个类别。这对于资产配置很有用:
some-doc
├── index.md
├── img1.png
└── img2.png
自定义类别索引匹配
可以选择退出任何类别索引约定,或者定义更多约定。你可以通过sidebarItemsGenerator
回调注入你自己的isCategoryIndex
匹配器。例如,您还可以选择intro
作为另一个有资格自动成为类别索引的文件名。
module.exports = {
plugins: [
[
'@docusaurus/plugin-content-docs',
{
async sidebarItemsGenerator({
...args,
isCategoryIndex: defaultCategoryIndexMatcher, // The default matcher implementation, given below
defaultSidebarItemsGenerator,
}) {
return defaultSidebarItemsGenerator({
...args,
isCategoryIndex(doc) {
return (
// Also pick intro.md in addition to the default ones
doc.fileName.toLowerCase() === 'intro' ||
defaultCategoryIndexMatcher(doc)
);
},
});
},
},
],
],
};
或者选择没有任何类别索引约定。
module.exports = {
plugins: [
[
'@docusaurus/plugin-content-docs',
{
async sidebarItemsGenerator({
...args,
isCategoryIndex: defaultCategoryIndexMatcher, // The default matcher implementation, given below
defaultSidebarItemsGenerator,
}) {
return defaultSidebarItemsGenerator({
...args,
isCategoryIndex() {
// No doc will be automatically picked as category index
return false;
},
});
},
},
],
],
};
isCategoryIndex
匹配器将提供三个字段:
fileName
, 文件名,不带扩展名,保留大小写directories
, 相对于 docs 根目录,目录名的列表从最低级别到最高级别extension
, 文件的扩展名,前面有一个圆点。
例如,对于位于guides/sidebar/autogenerated.md
的文档文件,匹配 器接收的属性是
const props = {
fileName: "autogenerated",
directories: ["sidebar", "guides"],
extension: ".md",
};
默认实现为:
function isCategoryIndex({ fileName, directories }) {
const eligibleDocIndexNames = ["index", "readme", directories[0].toLowerCase()];
return eligibleDocIndexNames.includes(fileName.toLowerCase());
}
自动生成的侧栏元数据
对于手写的边栏定义,你可以通过sidebars.js
为边栏项提供元数据;对于自动生成,Docusaurus 会从项目各自的文件中读取它们。此外,您可能希望调整每个项的相对位置,因为默认情况下,侧边栏切片中的项将按字母顺序生成(使用文件和文件夹名称)。
文档项元数据
label
, className
和customProps
属性分别在前面声明为sidebar_label
, sidebar_class_name
和sidebar_custom_props
。位置可以用同样的方式指定,通过sidebar_position
前面的内容。
---
sidebar_position: 2
sidebar_label: Easy
sidebar_class_name: green
---
# Easy Tutorial
This is the easy tutorial!
类别项元数据
在相应的文件夹中添加一个_category_.json
或_category_.yml
文件。您可以指定任何类别元数据,也可以指定位置
元数据。label
, className
, position
和customProps
将默认为类别的链接文档的相应值,如果有的话。
- JSON
- YAML
{
"position": 2.5,
"label": "Tutorial",
"collapsible": true,
"collapsed": false,
"className": "red",
"link": {
"type": "generated-index",
"title": "Tutorial overview"
},
"customProps": {
"description": "This description can be used in the swizzled DocCard"
}
}