vite.config.ts raw
1 import react from '@vitejs/plugin-react'
2 import { execSync } from 'child_process'
3 import path from 'path'
4 import { defineConfig } from 'vite'
5 import { VitePWA } from 'vite-plugin-pwa'
6 import packageJson from './package.json'
7
8 const getGitHash = () => {
9 try {
10 return JSON.stringify(execSync('git rev-parse --short HEAD').toString().trim())
11 } catch (error) {
12 console.warn('Failed to retrieve commit hash:', error)
13 return '"unknown"'
14 }
15 }
16
17 const getAppVersion = () => {
18 try {
19 return JSON.stringify(packageJson.version)
20 } catch (error) {
21 console.warn('Failed to retrieve app version:', error)
22 return '"unknown"'
23 }
24 }
25
26 // https://vite.dev/config/
27 export default defineConfig({
28 server: {
29 allowedHosts: ['smesh.mleku.dev']
30 },
31 define: {
32 'import.meta.env.GIT_COMMIT': getGitHash(),
33 'import.meta.env.APP_VERSION': getAppVersion()
34 },
35 resolve: {
36 alias: {
37 '@': path.resolve(__dirname, './src')
38 }
39 },
40 plugins: [
41 react(),
42 VitePWA({
43 registerType: 'autoUpdate',
44 workbox: {
45 globPatterns: ['**/*.{js,css,html,png,jpg,svg}'],
46 globDirectory: 'dist/',
47 maximumFileSizeToCacheInBytes: 5 * 1024 * 1024,
48 cleanupOutdatedCaches: true,
49 skipWaiting: true,
50 clientsClaim: true
51 },
52 devOptions: {
53 enabled: true
54 },
55 manifest: {
56 name: 'Smesh',
57 short_name: 'Smesh',
58 icons: [
59 {
60 src: '/pwa-512x512.png',
61 sizes: '512x512',
62 type: 'image/png',
63 purpose: 'any'
64 },
65 {
66 src: '/pwa-192x192.png',
67 sizes: '192x192',
68 type: 'image/png',
69 purpose: 'any'
70 },
71 {
72 src: '/pwa-512x512.png',
73 sizes: '512x512',
74 type: 'image/png',
75 purpose: 'maskable'
76 },
77 {
78 src: '/pwa-192x192.png',
79 sizes: '192x192',
80 type: 'image/png',
81 purpose: 'maskable'
82 },
83 {
84 src: '/pwa-monochrome.svg',
85 sizes: '512x512',
86 type: 'image/svg+xml',
87 purpose: 'monochrome'
88 }
89 ],
90 start_url: '/',
91 display: 'standalone',
92 background_color: '#171717',
93 theme_color: '#171717',
94 description: packageJson.description
95 }
96 })
97 ]
98 })
99