跳到主要内容

插件方法参考

注意

本节正在编写中。锚点链接或 URL 可能不稳定。

插件 API 由主题和插件共享 - 主题的加载方式与插件相同。

插件模块

每个插件都作为模块导入。该模块应具有以下成员:

  • 默认导出:插件的构造函数。
  • 命名导出:在初始化插件之前调用的静态方法

插件构造函数

插件模块的默认导出是一个具有签名 (context: LoadContext, options: PluginOptions) => Plugin | Promise<Plugin> 的构造函数。

context

context 是与插件无关的,对于 Docusaurus 网站使用的所有插件,都会传递相同的对象。context 对象包含以下字段:

type LoadContext = {
siteDir: string;
generatedFilesDir: string;
siteConfig: DocusaurusConfig;
outDir: string;
baseUrl: string;
};

options

options在使用插件时的第二个可选参数options 是特定于插件的,并由用户在 docusaurus.config.js 中指定。如果导出了 validateOptions 函数,则 options 将在此之前进行验证和规范化。

另外,如果预设包含插件,则预设将负责将正确的选项传递给插件。由各个插件自行定义它接受哪些选项。

示例

以下是一个假设的插件实现的心智模型。

// 返回对象的 JavaScript 函数。
// `context` 由 Docusaurus 提供。例如:可以从 context 访问 siteConfig。
// `opts` 是用户定义的选项。
export default async function myPlugin(context, opts) {
return {
// 一个强制字段,用作缓存每个插件中间数据的目录的命名空间。
// 如果您正在编写自己的本地插件,您希望它是唯一的,以避免与导入的插件可能发生冲突。
// 一个好方法是在其中添加您自己的项目名称。
name: 'docusaurus-my-project-cool-plugin',

async loadContent() {
// loadContent 钩子在加载 siteConfig 和 env 之后执行。
// 您可以返回一个 JavaScript 对象,该对象将传递给 contentLoaded 钩子。
},

async contentLoaded({content, actions}) {
// contentLoaded 钩子在 loadContent 钩子完成后完成。
// `actions` 是 Docusaurus 提供的一组功能性 API(例如 addRoute)
},

async postBuild(props) {
// 在 docusaurus <build> 完成后。
},

// TODO
async postStart(props) {
// docusaurus <start> 完成
},

// TODO
afterDevServer(app, server) {
// https://webpack.js.org/configuration/dev-server/#devserverbefore
},

// TODO
beforeDevServer(app, server) {
// https://webpack.js.org/configuration/dev-server/#devserverafter
},

configureWebpack(config, isServer, utils, content) {
// 修改内部 webpack 配置。如果返回值是一个对象,它
// 将使用 webpack-merge 合并到最终配置中;
// 如果返回值是一个函数,它将接收配置作为第一个参数,isServer 标志作为第二个参数。
},

getPathsToWatch() {
// 要监视的路径。
},

getThemePath() {
// 返回可以找到主题组件的目录路径。
},

getClientModules() {
// 返回要在客户端捆绑包中导入的模块路径数组。
// 这些模块在 React 渲染初始 UI 之前全局导入。
},

extendCli(cli) {
// 注册额外的命令以增强 Docusaurus 的 CLI
},

injectHtmlTags({content}) {
// 注入 head 和/或 body HTML 标签。
},

async getTranslationFiles({content}) {
// 返回翻译文件
},

translateContent({content, translationFiles}) {
// 在此处翻译插件内容
},

translateThemeConfig({themeConfig, translationFiles}) {
// 在此处翻译站点 themeConfig
},

async getDefaultCodeTranslationMessages() {
// 在此处返回默认主题翻译
},
};
}

export function validateOptions({options, validate}) {
const validatedOptions = validate(myValidationSchema, options);
return validatedOptions;
}

export function validateThemeConfig({themeConfig, validate}) {
const validatedThemeConfig = validate(myValidationSchema, options);
return validatedThemeConfig;
}