vite.config.ts 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import { defineConfig } from "vite";
  2. import vue from "@vitejs/plugin-vue";
  3. import path from "path";
  4. import { createRequire } from 'module';
  5. const require = createRequire(import.meta.url);
  6. const prerender = require('vite-plugin-prerender');
  7. export default defineConfig(({ mode }) => {
  8. console.log(`🔨 Vite build mode: ${mode}`);
  9. const outDir = process.env.VITE_OUT_DIR || 'dist';
  10. return {
  11. plugins: [
  12. vue(),
  13. ...(mode === 'production' ? [
  14. prerender({
  15. staticDir: path.join(__dirname, outDir),
  16. routes: ['/', '/en/', '/me/', '/ru/', '/ua/'],
  17. renderer: new prerender.PuppeteerRenderer({
  18. renderAfterDocumentEvent: 'render-event',
  19. injectProperty: '__PRERENDER_INJECTED',
  20. maxTimeout: 30000,
  21. headless: true,
  22. args: [
  23. '--no-sandbox',
  24. '--disable-setuid-sandbox',
  25. '--disable-dev-shm-usage',
  26. '--disable-gpu',
  27. '--single-process'
  28. ],
  29. consoleHandler: (route: string, message: any) => {
  30. console.log(`[🔨 Prerender Console - ${route}] ${message.text()}`);
  31. }
  32. }),
  33. postProcess(renderedRoute: any) {
  34. console.log(`[🔨 Prerender] Finished: ${renderedRoute.route}`);
  35. return renderedRoute;
  36. }
  37. })
  38. ] : [])
  39. ],
  40. resolve: {
  41. alias: {
  42. "@": path.resolve(__dirname, "./src"),
  43. },
  44. },
  45. build: {
  46. outDir: outDir,
  47. target: 'es2018',
  48. chunkSizeWarningLimit: 1000,
  49. cssMinify: true,
  50. minify: 'esbuild',
  51. rollupOptions: {
  52. output: {
  53. manualChunks: {
  54. 'three-vendor': ['three'],
  55. 'ui-vendor': ['lucide-vue-next', '@vueuse/core'],
  56. }
  57. }
  58. }
  59. },
  60. esbuild: {
  61. legalComments: 'none',
  62. target: 'es2018',
  63. },
  64. test: {
  65. globals: true,
  66. environment: "jsdom",
  67. },
  68. };
  69. });