69 lines
1.5 KiB
JavaScript
69 lines
1.5 KiB
JavaScript
import { defineConfig } from "vite";
|
|
import { VitePWA } from "vite-plugin-pwa";
|
|
import viteCompression from "vite-plugin-compression";
|
|
|
|
const webManifest = {
|
|
name: "Topos",
|
|
short_name: "Topos",
|
|
description: "Live coding environment",
|
|
theme_color: "#ffffff",
|
|
icons: [
|
|
{
|
|
src: "favicon/android-chrome-192x192.png",
|
|
sizes: "192x192",
|
|
type: "image/png",
|
|
purpose: "any maskable",
|
|
},
|
|
{
|
|
src: "favicon/android-chrome-512x512.png",
|
|
sizes: "512x512",
|
|
type: "image/png",
|
|
purpose: "any maskable",
|
|
},
|
|
],
|
|
};
|
|
|
|
const vitePWAconfiguration = {
|
|
devOptions: {
|
|
enabled: true,
|
|
},
|
|
workbox: {
|
|
sourcemap: true,
|
|
cleanupOutdatedCaches: true,
|
|
globPatterns: ["**/*.{js,css,html,ico,png,svg}"],
|
|
},
|
|
includeAssets: [
|
|
"favicon/favicon.icon",
|
|
"favicon/apple-touch-icon.png",
|
|
"mask-icon.svg",
|
|
],
|
|
manifest: webManifest,
|
|
registerType: "autoUpdate",
|
|
injectRegister: "auto",
|
|
};
|
|
|
|
export default defineConfig(({ command, mode, ssrBuild }) => {
|
|
if (command === "serve") {
|
|
return {
|
|
plugins: [viteCompression(), VitePWA(vitePWAconfiguration)],
|
|
assetsInclude: ["**/*.md"],
|
|
server: {
|
|
port: 8000,
|
|
strictPort: true,
|
|
},
|
|
};
|
|
} else {
|
|
return {
|
|
plugins: [viteCompression(), VitePWA(vitePWAconfiguration)],
|
|
chunkSizeWarningLimit: 1600 * 2,
|
|
build: {
|
|
outDir: "dist",
|
|
emptyOutDir: true,
|
|
cssCodeSplit: true,
|
|
cssMinify: true,
|
|
minify: true,
|
|
},
|
|
};
|
|
}
|
|
});
|