VitePress 生成站点地图
VitePress 默认支持为您的网站生成 sitemap.xml
文件。要启用它,请将以下内容添加到您的 .vitepress/config.js
文件中。
基础配置
ts
import { defineConfig } from 'vitepress'
export default defineConfig({
sitemap: {
hostname: 'https://example.com'
}
})
如果您想在 sitemap.xml
中使用 <lastmod>
标签,您可以启用 lastUpdated
选项。
可用选项
网站地图支持由 sitemap
模块提供。您可以将其支持的任何选项传递给配置文件中的 sitemap
选项。这些选项将直接传递给 SitemapStream
构造函数。有关更多详细信息,请参阅 [sitemap](https://www.npmjs.com/package/sitemap#options-you-can-pass)
文档。
示例:
ts
import { defineConfig } from 'vitepress'
export default defineConfig({
sitemap: {
hostname: 'https://example.com',
lastmodDateOnly: false
}
})
transformItems
钩子
您可以使用 sitemap.transformItems
钩子在将项目写入 sitemap.xml
文件之前修改站点地图项目。该钩子将使用一个包含站点地图项目的数组进行调用,并期望返回一个包含站点地图项目的数组。
示例:
ts
import { defineConfig } from 'vitepress'
export default defineConfig({
sitemap: {
hostname: 'https://example.com',
transformItems: (items) => {
// add new items or modify/filter existing items
items.push({
url: '/extra-page',
changefreq: 'monthly',
priority: 0.8
})
return items
}
}
})
另一种方法
安装依赖
环境和依赖版本
node
18.xpnpm
7.xvitepress
1.0.0-alpha.51sitemap
7.1.1
sh
pnpm add -D sitemap
修改配置文件
docs/.vitepress/config.mts
ts
import { createWriteStream } from 'node:fs'
import { resolve } from 'node:path'
import { SitemapStream } from 'sitemap'
import { defineConfig, PageData } from 'vitepress'
const links: { url: string; lastmod: PageData['lastUpdated'] }[] = []
export default defineConfig({
// 其他配置项...
/* 站点地图 */
transformHtml: (_, id, { pageData }) => {
if (!/[\\/]404\.html$/.test(id))
links.push({
url: pageData.relativePath.replace(/((^|\/)index)?\.md$/, '$2')+ '.html',
lastmod: pageData.lastUpdated
})
},
buildEnd: async ({ outDir }) => {
// hostname 为线上域名
const sitemap = new SitemapStream({ hostname: 'https://nickyam.com/' })
const writeStream = createWriteStream(resolve(outDir, 'sitemap.xml'))
sitemap.pipe(writeStream)
links.forEach((link) => sitemap.write(link))
sitemap.end()
await new Promise((r) => writeStream.on('finish', r))
}
})