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