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: "./", build: { // 开发阶段启用源码映射:https://uniapp.dcloud.net.cn/tutorial/migration-to-vue3.html#需主动开启-sourcemap sourcemap: process.env.NODE_ENV === "development", }, plugins: [ vue(), basicSsl(), generateStaticFiles(), VitePWA({ registerType: "autoUpdate", manifest: { name: "P2P Explorer", short_name: "P2P Explorer", description: "P2P文件传输与浏览工具", theme_color: "#f5f5f5", //米色 background_color: "#f5f5f5", icons: [ { src: "/static/icon64.png", sizes: "64x64", type: "image/png", }, { src: "/static/icon256.png", sizes: "256x256", type: "image/png", }, ], }, workbox: { globPatterns: ["**/*.{js,css,html,ico,png,svg,webp}"], navigateFallbackDenylist: [/^\/about(?:\/|$)/], runtimeCaching: [], }, }), ], server: { host: "0.0.0.0", }, });