108 lines
2.8 KiB
TypeScript
108 lines
2.8 KiB
TypeScript
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 = `<?xml version="1.0" encoding="UTF-8"?>
|
||
<urlset xmlns="https://www.sitemaps.org/schemas/sitemap/0.9">
|
||
<url>
|
||
<loc>${siteUrl}/</loc>
|
||
<lastmod>${lastmod}</lastmod>
|
||
<changefreq>weekly</changefreq>
|
||
<priority>1.0</priority>
|
||
</url>
|
||
<url>
|
||
<loc>${siteUrl}/about/</loc>
|
||
<lastmod>${lastmod}</lastmod>
|
||
<changefreq>monthly</changefreq>
|
||
<priority>0.8</priority>
|
||
</url>
|
||
</urlset>
|
||
`;
|
||
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",
|
||
},
|
||
});
|