Files
AstrBot/dashboard/vite.config.ts
camera-2018 4e5587998b perf(dashboard): subset MDI icon font and self-host Google Fonts (#6532)
* perf(dashboard): subset MDI icon font and self-host Google Fonts

* perf(dashboard): subset MDI icon font and self-host Google Fonts

* perf(dashboard): subset MDI icon font and self-host Google Fonts

* perf(dashboard): subset MDI icon font cr fix

* chore: update lockfile
2026-03-18 16:32:19 +08:00

68 lines
1.6 KiB
TypeScript

import { fileURLToPath, URL } from 'url';
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import vuetify from 'vite-plugin-vuetify';
import webfontDl from 'vite-plugin-webfont-dl';
// @ts-ignore — .mjs not in TS project scope; Vite resolves this at runtime
import { runMdiSubset } from './scripts/subset-mdi-font.mjs';
// Vite plugin: run MDI icon font subsetting (build only)
function mdiSubset() {
return {
name: 'vite-plugin-mdi-subset',
async buildStart() {
console.log('\n🔧 Running MDI icon font subsetting...');
await runMdiSubset();
},
};
}
// https://vitejs.dev/config/
export default defineConfig(({ command }) => ({
plugins: [
// Only run MDI subsetting during production builds, skip in dev server
...(command === 'build' ? [mdiSubset()] : []),
vue({
template: {
compilerOptions: {
isCustomElement: (tag) => ['v-list-recognize-title'].includes(tag)
}
}
}),
vuetify({
autoImport: true
}),
webfontDl()
],
resolve: {
alias: {
mermaid: 'mermaid/dist/mermaid.js',
'@': fileURLToPath(new URL('./src', import.meta.url))
}
},
css: {
preprocessorOptions: {
scss: {}
}
},
build: {
sourcemap: false,
chunkSizeWarningLimit: 1024 * 1024 // Set the limit to 1 MB
},
optimizeDeps: {
exclude: ['vuetify'],
entries: ['./src/**/*.vue']
},
server: {
host: '0.0.0.0',
port: 3000,
proxy: {
'/api': {
target: 'http://127.0.0.1:6185/',
changeOrigin: true,
ws: true
}
}
}
}));