vite.config.ts 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. prerender({
  14. staticDir: path.join(__dirname, outDir),
  15. routes: ['/', '/en/', '/me/', '/ru/', '/ua/'],
  16. renderer: new prerender.PuppeteerRenderer({
  17. renderAfterDocumentEvent: 'render-event',
  18. injectProperty: '__PRERENDER_INJECTED',
  19. maxTimeout: 30000,
  20. headless: true,
  21. args: [
  22. '--no-sandbox',
  23. '--disable-setuid-sandbox',
  24. '--disable-dev-shm-usage',
  25. '--disable-gpu',
  26. '--single-process'
  27. ],
  28. consoleHandler: (route: string, message: any) => {
  29. console.log(`[🔨 Prerender Console - ${route}] ${message.text()}`);
  30. }
  31. }),
  32. postProcess(renderedRoute: any) {
  33. console.log(`[🔨 Prerender] Finished: ${renderedRoute.route}`);
  34. return renderedRoute;
  35. }
  36. })
  37. ],
  38. resolve: {
  39. alias: {
  40. "@": path.resolve(__dirname, "./src"),
  41. },
  42. },
  43. build: {
  44. outDir: outDir,
  45. target: 'es2018',
  46. chunkSizeWarningLimit: 1000,
  47. cssMinify: true,
  48. minify: 'esbuild',
  49. rollupOptions: {
  50. output: {
  51. manualChunks: {
  52. 'three-vendor': ['three'],
  53. 'ui-vendor': ['lucide-vue-next', '@vueuse/core'],
  54. }
  55. }
  56. }
  57. },
  58. esbuild: {
  59. legalComments: 'none',
  60. target: 'es2018',
  61. },
  62. test: {
  63. globals: true,
  64. environment: "jsdom",
  65. },
  66. };
  67. });