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