From 1eea162b9ddb66ce8f6b0cc9a5acc42b920cd9d7 Mon Sep 17 00:00:00 2001 From: pengzhanbo Date: Thu, 21 Nov 2024 22:01:24 +0800 Subject: [PATCH] feat(theme): add support for seo & sitemap plugin options --- .../guide/\345\212\237\350\203\275/seo.md" | 16 ++++++++++++++++ .../guide/\345\212\237\350\203\275/sitemap.md" | 16 ++++++++++++++++ theme/src/node/plugins/getPlugins.ts | 17 ++++++++++++----- theme/src/shared/options/plugins.ts | 6 ++++-- 4 files changed, 48 insertions(+), 7 deletions(-) diff --git "a/docs/notes/theme/guide/\345\212\237\350\203\275/seo.md" "b/docs/notes/theme/guide/\345\212\237\350\203\275/seo.md" index abf23cd25..4e3c7ea71 100644 --- "a/docs/notes/theme/guide/\345\212\237\350\203\275/seo.md" +++ "b/docs/notes/theme/guide/\345\212\237\350\203\275/seo.md" @@ -19,6 +19,22 @@ export default defineUserConfig({ }) ``` +如需要自定义 SEO 优化,可以通过 `plugins.seo` 配置来实现。 + +```js +export default defineUserConfig({ + theme: plumeTheme({ + plugins: { + seo: { + // ... seo 配置 + } + } + }) +}) +``` + +完整配置请查看 [文档](https://ecosystem.vuejs.press/zh/plugins/seo/seo/config.html) + ::: note 示例 Fork 自 [@vuepress/plugin-seo](https://ecosystem.vuejs.press/zh/plugins/seo/seo/), 遵循 [MIT](https://github.com/vuepress/ecosystem/blob/main/LICENSE) 许可证。 diff --git "a/docs/notes/theme/guide/\345\212\237\350\203\275/sitemap.md" "b/docs/notes/theme/guide/\345\212\237\350\203\275/sitemap.md" index bc100bcbb..5316d62ee 100644 --- "a/docs/notes/theme/guide/\345\212\237\350\203\275/sitemap.md" +++ "b/docs/notes/theme/guide/\345\212\237\350\203\275/sitemap.md" @@ -18,3 +18,19 @@ export default defineUserConfig({ }) }) ``` + +如需要自定义 sitemap,可以通过 `plugins.sitemap` 配置来实现。 + +```js +export default defineUserConfig({ + theme: plumeTheme({ + plugins: { + sitemap: { + // ... sitemap 配置 + } + } + }) +}) +``` + +完整配置请查看 [文档](https://ecosystem.vuejs.press/zh/plugins/seo/sitemap/config.html) diff --git a/theme/src/node/plugins/getPlugins.ts b/theme/src/node/plugins/getPlugins.ts index 60acd0c90..ec15a5364 100644 --- a/theme/src/node/plugins/getPlugins.ts +++ b/theme/src/node/plugins/getPlugins.ts @@ -11,8 +11,8 @@ import { markdownMathPlugin } from '@vuepress/plugin-markdown-math' import { nprogressPlugin } from '@vuepress/plugin-nprogress' import { photoSwipePlugin } from '@vuepress/plugin-photo-swipe' import { readingTimePlugin } from '@vuepress/plugin-reading-time' -import { seoPlugin } from '@vuepress/plugin-seo' -import { sitemapPlugin } from '@vuepress/plugin-sitemap' +import { seoPlugin, type SeoPluginOptions } from '@vuepress/plugin-seo' +import { sitemapPlugin, type SitemapPluginOptions } from '@vuepress/plugin-sitemap' import { watermarkPlugin } from '@vuepress/plugin-watermark' import { contentUpdatePlugin } from '@vuepress-plume/plugin-content-update' import { fontsPlugin } from '@vuepress-plume/plugin-fonts' @@ -154,12 +154,19 @@ export function getPlugins( plugins.push(commentPlugin(pluginOptions.comment)) } - if (pluginOptions.sitemap !== false && hostname && isProd) { - plugins.push(sitemapPlugin({ hostname })) + if (pluginOptions.sitemap !== false && isProd) { + const sitemapOptions = isPlainObject(pluginOptions.sitemap) ? pluginOptions.sitemap : {} + sitemapOptions.hostname ||= hostname + + if (sitemapOptions.hostname) + plugins.push(sitemapPlugin(sitemapOptions as SitemapPluginOptions)) } if (pluginOptions.seo !== false && hostname && isProd) { - plugins.push(seoPlugin({ hostname })) + const seoOptions = isPlainObject(pluginOptions.seo) ? pluginOptions.seo : {} + seoOptions.hostname ||= hostname + if (seoOptions.hostname) + plugins.push(seoPlugin(seoOptions as SeoPluginOptions)) } if (cache !== false) { diff --git a/theme/src/shared/options/plugins.ts b/theme/src/shared/options/plugins.ts index d8a9a8c73..2d1499554 100644 --- a/theme/src/shared/options/plugins.ts +++ b/theme/src/shared/options/plugins.ts @@ -3,6 +3,8 @@ import type { DocSearchOptions } from '@vuepress/plugin-docsearch' import type { MarkdownImagePluginOptions } from '@vuepress/plugin-markdown-image' import type { MarkdownMathPluginOptions } from '@vuepress/plugin-markdown-math' import type { ReadingTimePluginOptions } from '@vuepress/plugin-reading-time' +import type { SeoPluginOptions } from '@vuepress/plugin-seo' +import type { SitemapPluginOptions } from '@vuepress/plugin-sitemap' import type { WatermarkPluginOptions } from '@vuepress/plugin-watermark' import type { SearchPluginOptions } from '@vuepress-plume/plugin-search' import type { ShikiPluginOptions } from '@vuepress-plume/plugin-shikiji' @@ -69,9 +71,9 @@ export interface PlumeThemePluginOptions { comment?: false | CommentPluginOptions - sitemap?: false + sitemap?: false | Omit & { hostname?: string } - seo?: false + seo?: false | Omit & { hostname?: string } /** * 阅读时间、字数统计