跳到主要内容

插件方法参考

注意

本章节仍在完善中。锚点链接或 URL 可能会变动,请勿依赖其稳定性。

插件 API 由主题和插件共享——主题的加载方式与插件一致。

插件模块

每个插件都以模块形式导入。该模块应包含以下成员:

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

插件构造函数

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

context

context 与插件无关,所有插件都会接收到同一个 context 对象。context 包含以下字段:

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

options

options插件使用时的第二个可选参数options 由用户在 docusaurus.config.js 中指定,具体内容由插件自行定义。如果模块导出了 validateOptions 方法,则 options 会在传递前被校验和规范化。

另外,如果插件由预设引入,则预设会负责传递正确的 options。每个插件可自定义其支持的 options。

示例

以下是一个插件实现的思路示例。

// 一个返回对象的 JavaScript 函数。
// `context` 由道格龙(Docusaurus)提供。例如:siteConfig 可通过 context 访问。
// `opts` 是用户自定义的选项。
export default async function myPlugin(context, opts) {
return {
// 必填字段,用作缓存插件中间数据的目录命名空间。
// 如果你在本地开发插件,建议保证唯一性,避免与第三方插件冲突。
// 推荐方式:在名称中加入你的项目名。
name: 'docusaurus-my-project-cool-plugin',

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

async contentLoaded({content, actions}) {
// contentLoaded 钩子在 loadContent 完成后执行。
// `actions` 是道格龙提供的一组功能 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 合并进最终配置;
// 如果返回函数,则第一个参数为 config,第二个参数为 isServer。
},

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

getThemePath() {
// 返回主题组件所在目录的路径。
},

getClientModules() {
// 返回需要在客户端全局引入的模块路径数组。这些模块会在 React 渲染 UI 前全局导入。
},

extendCli(cli) {
// 注册额外命令,扩展道格龙 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;
}