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 define: {
29 'import.meta.env.GIT_COMMIT': getGitHash(),
30 'import.meta.env.APP_VERSION': getAppVersion()
31 },
32 resolve: {
33 alias: {
34 '@': path.resolve(__dirname, './src')
35 }
36 },
37 plugins: [
38 react(),
39 VitePWA({
40 registerType: 'autoUpdate',
41 workbox: {
42 globPatterns: ['**/*.{js,css,html,png,jpg,svg}'],
43 globDirectory: 'dist/',
44 maximumFileSizeToCacheInBytes: 5 * 1024 * 1024,
45 cleanupOutdatedCaches: true,
46 skipWaiting: true,
47 clientsClaim: true
48 },
49 devOptions: {
50 enabled: true
51 },
52 manifest: {
53 name: 'Smesh',
54 short_name: 'Smesh',
55 icons: [
56 {
57 src: '/pwa-512x512.png',
58 sizes: '512x512',
59 type: 'image/png',
60 purpose: 'any'
61 },
62 {
63 src: '/pwa-192x192.png',
64 sizes: '192x192',
65 type: 'image/png',
66 purpose: 'any'
67 },
68 {
69 src: '/pwa-512x512.png',
70 sizes: '512x512',
71 type: 'image/png',
72 purpose: 'maskable'
73 },
74 {
75 src: '/pwa-192x192.png',
76 sizes: '192x192',
77 type: 'image/png',
78 purpose: 'maskable'
79 },
80 {
81 src: '/pwa-monochrome.svg',
82 sizes: '512x512',
83 type: 'image/svg+xml',
84 purpose: 'monochrome'
85 }
86 ],
87 start_url: '/',
88 display: 'standalone',
89 background_color: '#171717',
90 theme_color: '#171717',
91 description: packageJson.description
92 }
93 })
94 ]
95 })
96