diff --git a/vite.config.ts b/vite.config.ts index ba4e678..1ef4746 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -2,6 +2,66 @@ import { defineConfig } from "vite"; import basicSsl from "@vitejs/plugin-basic-ssl"; import vue from "@vitejs/plugin-vue"; import { VitePWA } from "vite-plugin-pwa"; +import { + copyFileSync, + mkdirSync, + writeFileSync, + readdirSync, + cpSync, +} from "node:fs"; + +const siteUrl = "https://explorer.kuraa.cc"; + +function generateStaticFiles() { + return { + name: "generate-static-files", + closeBundle() { + const aboutDir = new URL("./dist/about/", import.meta.url); + mkdirSync(aboutDir, { recursive: true }); + cpSync( + new URL("./static/", import.meta.url), + new URL("./dist/static/", import.meta.url), + { + recursive: true, + }, + ); + const files = readdirSync(new URL("./readme/", import.meta.url)); + files.forEach((file) => { + copyFileSync( + new URL(`./readme/${file}`, import.meta.url), + new URL(`./dist/about/${file}`, import.meta.url), + ); + }); + + const lastmod = new Date().toISOString().slice(0, 10); + const sitemap = ` + + + ${siteUrl}/ + ${lastmod} + weekly + 1.0 + + + ${siteUrl}/about/ + ${lastmod} + monthly + 0.8 + + +`; + const robots = `User-agent: * +Allow: / + +Sitemap: ${siteUrl}/sitemap.xml +`; + + writeFileSync(new URL("./dist/sitemap.xml", import.meta.url), sitemap); + writeFileSync(new URL("./dist/robots.txt", import.meta.url), robots); + }, + }; +} + // https://vitejs.dev/config/ export default defineConfig({ base: "./", @@ -12,6 +72,7 @@ export default defineConfig({ plugins: [ vue(), basicSsl(), + generateStaticFiles(), VitePWA({ registerType: "autoUpdate", manifest: {