diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 32aaededc..4ffa8c30f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1066,6 +1066,9 @@ importers: rsbuild-plugin-google-analytics: specifier: 1.0.3 version: 1.0.3(@rsbuild/core@1.3.19) + rsbuild-plugin-open-graph: + specifier: ^1.0.2 + version: 1.0.2(@rsbuild/core@1.3.19) rspress: specifier: 2.0.0-beta.5 version: 2.0.0-beta.5(@types/react@19.1.3)(acorn@8.14.0)(webpack@5.98.0) @@ -6080,6 +6083,14 @@ packages: '@rsbuild/core': optional: true + rsbuild-plugin-open-graph@1.0.2: + resolution: {integrity: sha512-JGBMM9T7GNX47Y3jiSJkhoK2rT1bb7+TOO6yYpMHW+/3PLD9i0vv2S4qfdskTnVo8kTNEAYzTZrd+k+XuWxcNA==} + peerDependencies: + '@rsbuild/core': 0.x || 1.x || ^1.0.1-beta.0 + peerDependenciesMeta: + '@rsbuild/core': + optional: true + rsbuild-plugin-publint@0.3.2: resolution: {integrity: sha512-vFqPvierA+ePsVouf05RDIMbsPoylDxveLTK+FS8mFxpFij9mM7uHl/8YQCbGOPpoY1qeykfkIEKZroXMuSU3A==} peerDependencies: @@ -13052,6 +13063,10 @@ snapshots: optionalDependencies: '@rsbuild/core': 1.3.19 + rsbuild-plugin-open-graph@1.0.2(@rsbuild/core@1.3.19): + optionalDependencies: + '@rsbuild/core': 1.3.19 + rsbuild-plugin-publint@0.3.2(@rsbuild/core@1.3.19): dependencies: picocolors: 1.1.1 diff --git a/website/package.json b/website/package.json index b8564d2e0..7e63f88a2 100644 --- a/website/package.json +++ b/website/package.json @@ -22,6 +22,7 @@ "react": "^19.1.0", "react-dom": "^19.1.0", "rsbuild-plugin-google-analytics": "1.0.3", + "rsbuild-plugin-open-graph": "^1.0.2", "rspress": "2.0.0-beta.5", "rspress-plugin-font-open-sans": "1.0.0" } diff --git a/website/rspress.config.ts b/website/rspress.config.ts index 37b13e006..375b9fc8f 100644 --- a/website/rspress.config.ts +++ b/website/rspress.config.ts @@ -4,10 +4,12 @@ import { pluginLlms } from '@rspress/plugin-llms'; import { pluginRss } from '@rspress/plugin-rss'; import { transformerNotationHighlight } from '@shikijs/transformers'; import { pluginGoogleAnalytics } from 'rsbuild-plugin-google-analytics'; +import { pluginOpenGraph } from 'rsbuild-plugin-open-graph'; import { pluginFontOpenSans } from 'rspress-plugin-font-open-sans'; import { defineConfig } from 'rspress/config'; const siteUrl = 'https://lib.rsbuild.dev'; +const description = 'The Rsbuild-based library development tool'; export default defineConfig({ plugins: [ @@ -62,6 +64,17 @@ export default defineConfig({ // exclude document fragments from routes exclude: ['**/zh/shared/**', '**/en/shared/**'], }, + head: [ + ({ routePath }) => { + const getOgImage = () => { + if (routePath.endsWith('blog/introducing-rslib')) { + return 'assets/rslib-og-image-introducing.png'; + } + return 'rslib-og-image.png'; + }; + return ``; + }, + ], themeConfig: { socialLinks: [ { @@ -85,7 +98,7 @@ export default defineConfig({ lang: 'en', label: 'English', title: 'Rslib', - description: 'The Rsbuild-based library development tool', + description, editLink: { docRepoBaseUrl: 'https://github.com/web-infra-dev/rslib/tree/main/website/docs', @@ -127,6 +140,19 @@ export default defineConfig({ '@zh': path.join(__dirname, 'docs/zh'), }, }, - plugins: [pluginGoogleAnalytics({ id: 'G-Q66CEHQ6JR' }), pluginSass()], + plugins: [ + pluginGoogleAnalytics({ id: 'G-Q66CEHQ6JR' }), + pluginSass(), + pluginOpenGraph({ + title: 'Rslib', + type: 'website', + url: siteUrl, + description, + twitter: { + site: '@rspack_dev', + card: 'summary_large_image', + }, + }), + ], }, });