import { defineConfig } from 'vite' import { mkdirSync, writeFileSync } from 'node:fs' import { fileURLToPath, URL } from 'node:url' import vue from '@vitejs/plugin-vue' import tailwindcss from '@tailwindcss/vite' const publicRoutes = [ '/', '/encyclopedia', '/gallery', '/community', ] function getSiteUrl() { const explicitUrl = process.env.VITE_SITE_URL const vercelUrl = process.env.VERCEL_PROJECT_PRODUCTION_URL const siteUrl = explicitUrl || (vercelUrl ? `https://${vercelUrl}` : 'https://cloud.catpl.dev') return siteUrl.replace(/\/$/, '') } function seoFilesPlugin() { return { name: 'opencloud-seo-files', closeBundle() { const siteUrl = getSiteUrl() mkdirSync('dist/.well-known', { recursive: true }) const robots = [ 'User-agent: *', 'Allow: /', 'Disallow: /admin', 'Disallow: /auth/', 'Disallow: /login', 'Disallow: /register', 'Disallow: /upload', 'Disallow: /profile/settings', `Sitemap: ${siteUrl}/sitemap.xml`, '', ].join('\n') const sitemapUrls = publicRoutes .map(route => ` \n ${siteUrl}${route}\n `) .join('\n') const sitemap = [ '', '', sitemapUrls, '', '', ].join('\n') writeFileSync('dist/robots.txt', robots) writeFileSync('dist/sitemap.xml', sitemap) }, } } export default defineConfig({ plugins: [vue(), tailwindcss(), seoFilesPlugin()], resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)), }, }, })