import BLOG from '@/blog.config' import fs from 'fs' import { siteConfig } from './config' /** * 生成站点地图 * @param {*} param0 */ export async function generateSitemapXml({ allPages, NOTION_CONFIG }) { let link = siteConfig('LINK', BLOG.LINK, NOTION_CONFIG) // 确保链接不以斜杠结尾 if (link && link.endsWith('/')) { link = link.slice(0, -1) } const urls = [ { loc: `${link}`, lastmod: new Date().toISOString().split('T')[0], changefreq: 'daily', priority: 1.0 }, { loc: `${link}/archive`, lastmod: new Date().toISOString().split('T')[0], changefreq: 'daily', priority: 1.0 }, { loc: `${link}/category`, lastmod: new Date().toISOString().split('T')[0], changefreq: 'daily' }, { loc: `${link}/tag`, lastmod: new Date().toISOString().split('T')[0], changefreq: 'daily' } ] // 循环页面生成 allPages?.forEach(post => { const slugWithoutLeadingSlash = post?.slug?.startsWith('/') ? post?.slug?.slice(1) : post.slug urls.push({ loc: `${link}/${slugWithoutLeadingSlash}`, lastmod: new Date(post?.publishDay).toISOString().split('T')[0], changefreq: 'daily' }) }) const xml = createSitemapXml(urls) try { fs.writeFileSync('sitemap.xml', xml) fs.writeFileSync('./public/sitemap.xml', xml) } catch (error) { console.warn('无法写入文件', error) } } /** * 生成站点地图 * @param {*} urls * @returns */ function createSitemapXml(urls) { let urlsXml = '' urls.forEach(u => { urlsXml += ` ${u.loc} ${u.lastmod} ${u.changefreq} ` }) return ` ${urlsXml} ` }