使用插件
Docusaurus 核心本身不提供任何功能。 所有功能都委托给各个插件:文档 (docs) 功能由 文档插件 (docs plugin) 提供;博客 (blog) 功能由 博客插件 (blog plugin) 提供;或者单个页面 (pages) 由 页面插件 (pages plugin) 提供。如果没有安装任何插件,网站将不包含任何路由。
你可能不需要逐个安装常用插件:它们可以作为捆绑包通过 预设 (preset) 分发。对于大多数用户来说,插件是通过预设配置的。
我们维护着一份官方插件列表,但社区也创建了一些非官方插件。如果你想添加任何功能:自动生成文档页面、执行自定义脚本、集成其他服务……务必查看列表:可能有人已经为你实现了!
如果你精力充沛,你也可以阅读插件指南或插件方法参考,了解如何自己制作插件。
安装插件
插件通常是一个 npm 包,因此你可以像安装其他 npm 包一样使用 npm 进行安装。
- npm
- Yarn
- pnpm
- Bun
npm install --save docusaurus-plugin-name
yarn add docusaurus-plugin-name
pnpm add docusaurus-plugin-name
bun add docusaurus-plugin-name
然后将其添加到你网站的 docusaurus.config.js
文件的 plugins
选项中
export default {
// ...
plugins: ['@docusaurus/plugin-content-pages'],
};
Docusaurus 也可以从你的本地目录加载插件,如下所示
export default {
// ...
plugins: ['./src/plugins/docusaurus-local-plugin'],
};
路径应为绝对路径或相对于配置文件。
配置插件
对于插件最基本的用法,你只需提供插件名称或插件路径即可。
但是,插件可以通过在配置中将名称和选项对象包裹在一个包含两个成员的元组中来指定选项。这种风格通常被称为“Babel 风格”。
export default {
// ...
plugins: [
[
'@docusaurus/plugin-xxx',
{
/* options */
},
],
],
};
示例
export default {
plugins: [
// Basic usage.
'@docusaurus/plugin-debug',
// With options object (babel style)
[
'@docusaurus/plugin-sitemap',
{
changefreq: 'weekly',
},
],
],
};
多实例插件和插件 ID
所有 Docusaurus 内容插件都支持多个插件实例。例如,拥有多个文档插件实例或多个博客可能很有用。需要为每个插件实例分配一个唯一的 ID,默认情况下,插件 ID 为 default
。
export default {
plugins: [
[
'@docusaurus/plugin-content-docs',
{
id: 'docs-1',
// other options
},
],
[
'@docusaurus/plugin-content-docs',
{
id: 'docs-2',
// other options
},
],
],
};
最多只能有一个插件实例是“默认插件实例”,可以通过省略 id
属性或使用 id: 'default'
来实现。
使用主题
主题的加载方式与插件完全相同。从消费者的角度来看,在安装和配置插件时,themes
和 plugins
条目可以互换。唯一的细微差别是主题在插件之后加载,并且主题可能会覆盖插件的默认主题组件。
themes
和 plugins
选项导致不同的模块简写解析,因此如果你想利用简写,请务必使用正确的条目!
export default {
// ...
themes: ['@docusaurus/theme-classic', '@docusaurus/theme-live-codeblock'],
};
使用预设
预设是插件和主题的捆绑包。例如,Docusaurus 不会让你在配置文件中逐个注册和配置 @docusaurus/plugin-content-docs
、@docusaurus/plugin-content-blog
等,我们提供了 @docusaurus/preset-classic
预设,允许你将它们集中配置在一个地方。
@docusaurus/preset-classic
经典预设是使用 create-docusaurus
创建的新 Docusaurus 网站的默认配置。它包含以下主题和插件:
@docusaurus/theme-classic
@docusaurus/theme-search-algolia
@docusaurus/plugin-content-docs
@docusaurus/plugin-content-blog
@docusaurus/plugin-content-pages
@docusaurus/plugin-debug
@docusaurus/plugin-google-gtag
@docusaurus/plugin-google-tag-manager
@docusaurus/plugin-google-analytics
(已弃用)@docusaurus/plugin-sitemap
@docusaurus/plugin-svgr
经典预设会将每个选项条目转发给相应的插件/主题。
export default {
presets: [
[
'@docusaurus/preset-classic',
{
// Debug defaults to true in dev, false in prod
debug: undefined,
// Will be passed to @docusaurus/theme-classic.
theme: {
customCss: ['./src/css/custom.css'],
},
// Will be passed to @docusaurus/plugin-content-docs (false to disable)
docs: {},
// Will be passed to @docusaurus/plugin-content-blog (false to disable)
blog: {},
// Will be passed to @docusaurus/plugin-content-pages (false to disable)
pages: {},
// Will be passed to @docusaurus/plugin-sitemap (false to disable)
sitemap: {},
// Will be passed to @docusaurus/plugin-svgr (false to disable)
svgr: {},
// Will be passed to @docusaurus/plugin-google-gtag (only enabled when explicitly specified)
gtag: {},
// Will be passed to @docusaurus/plugin-google-tag-manager (only enabled when explicitly specified)
googleTagManager: {},
// DEPRECATED: Will be passed to @docusaurus/plugin-google-analytics (only enabled when explicitly specified)
googleAnalytics: {},
},
],
],
};
安装预设
预设通常是一个 npm 包,因此你可以像安装其他 npm 包一样使用 npm 进行安装。
- npm
- Yarn
- pnpm
- Bun
npm install --save @docusaurus/preset-classic
yarn add @docusaurus/preset-classic
pnpm add @docusaurus/preset-classic
bun add @docusaurus/preset-classic
然后将其添加到你网站的 docusaurus.config.js
文件的 presets
选项中
export default {
// ...
presets: ['@docusaurus/preset-classic'],
};
预设路径可以相对于配置文件
export default {
// ...
presets: ['./src/presets/docusaurus-local-preset'],
};
创建预设
预设是一个函数,其结构与插件构造函数相同。它应该返回一个包含 { plugins: PluginConfig[], themes: PluginConfig[] }
的对象,这与网站配置文件中接受的方式相同。例如,你可以指定一个包含以下主题和插件的预设:
export default function preset(context, opts = {}) {
return {
themes: [['docusaurus-theme-awesome', opts.theme]],
plugins: [
// Using three docs plugins at the same time!
// Assigning a unique ID for each without asking the user to do it
['@docusaurus/plugin-content-docs', {...opts.docs1, id: 'docs1'}],
['@docusaurus/plugin-content-docs', {...opts.docs2, id: 'docs2'}],
['@docusaurus/plugin-content-docs', {...opts.docs3, id: 'docs3'}],
],
};
}
然后,在你的 Docusaurus 配置中,你可以配置该预设
export default {
presets: [
[
'./src/presets/docusaurus-preset-multi-docs.js',
{
theme: {hello: 'world'},
docs1: {path: '/docs'},
docs2: {path: '/community'},
docs3: {path: '/api'},
},
],
],
};
这等同于执行以下操作:
export default {
themes: [['docusaurus-theme-awesome', {hello: 'world'}]],
plugins: [
['@docusaurus/plugin-content-docs', {id: 'docs1', path: '/docs'}],
['@docusaurus/plugin-content-docs', {id: 'docs2', path: '/community'}],
['@docusaurus/plugin-content-docs', {id: 'docs3', path: '/api'}],
],
};
当某些插件和主题旨在一起使用时,这尤其有用。你甚至可以将它们的选项关联起来,例如将一个选项传递给多个插件。
模块简写
Docusaurus 支持插件、主题和预设的简写。当它看到插件/主题/预设名称时,它会按以下顺序尝试加载其中一个:
[name]
(例如content-docs
)@docusaurus/[moduleType]-[name]
(例如@docusaurus/plugin-content-docs
)docusaurus-[moduleType]-[name]
(例如docusaurus-plugin-content-docs
)
其中 moduleType
是 'preset'
、'theme'
、'plugin'
之一,取决于模块名称在哪个字段中声明。第一个成功找到的模块名称将被加载。
如果名称是带有作用域的(以 @
开头),则名称会首先通过第一个斜杠拆分为作用域和包名称
@scope
^----^
scope (no name!)
@scope/awesome
^----^ ^-----^
scope name
@scope/awesome/main
^----^ ^----------^
scope name
如果没有名称(例如 @jquery
),则加载 [scope]/docusaurus-[moduleType]
(即 @jquery/docusaurus-plugin
)。否则,将尝试以下方式:
[scope]/[name]
(例如@jquery/content-docs
)[scope]/docusaurus-[moduleType]-[name]
(例如@jquery/docusaurus-plugin-content-docs
)
以下是注册在 plugins
字段中的插件的一些示例。请注意,与强制要求插件采用一致命名约定的 ESLint 或 Babel 不同,Docusaurus 允许更大的命名自由度,因此解析并非确定,但遵循上述定义的优先级。
声明 | 可能解析为 |
---|---|
awesome | docusaurus-plugin-awesome |
sitemap | @docusaurus/plugin-sitemap |
@my-company | @my-company/docusaurus-plugin (唯一的可能解析!) |
@my-company/awesome | @my-company/docusaurus-plugin-awesome |
@my-company/awesome/web | @my-company/docusaurus-plugin-awesome/web |