import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' import { execSync } from 'child_process' import { fileURLToPath, URL } from 'node:url' import { defineConfig } from 'vite' import { VitePWA } from 'vite-plugin-pwa' import { version } from './package.json' const getGitCommitId = (): string => { try { const commitMessage = execSync('git log -1 --pretty=%B', { encoding: 'utf8' }).trim() if (commitMessage.includes('chore(main): release')) { return '' } return execSync('git rev-parse --short HEAD', { encoding: 'utf8' }).trim() } catch (error) { console.warn('无法获取git commit ID:', error) return '' } } // https://vite.dev/config/ export default defineConfig({ define: { __APP_VERSION__: JSON.stringify(version), __COMMIT_ID__: JSON.stringify(getGitCommitId()), }, base: './', plugins: [ vue(), vueJsx(), VitePWA({ registerType: 'autoUpdate', includeAssets: ['favicon.svg', 'favicon-dark.svg'], manifest: { name: 'zashboard', short_name: 'zashboard', description: 'a dashboard using clash api', theme_color: '#000000', icons: [ { src: './pwa-192x192.png', sizes: '192x192', type: 'image/png', purpose: 'any', }, { src: './pwa-512x512.png', sizes: '512x512', type: 'image/png', purpose: 'any', }, { src: './pwa-maskable-192x192.png', sizes: '192x192', type: 'image/png', purpose: 'maskable', }, { src: './pwa-maskable-512x512.png', sizes: '512x512', type: 'image/png', purpose: 'maskable', }, ], }, }), ], resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)), }, }, })