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. return {
  10. plugins: [
  11. vue(),
  12. prerender({
  13. // REQUIRED: The path to the built app to prerender.
  14. staticDir: path.join(__dirname, 'dist'),
  15. // The routes to render.
  16. routes: [
  17. '/',
  18. '/en/', '/me/', '/ru/', '/ua/',
  19. '/en/portfolio', '/me/portfolio', '/ru/portfolio', '/ua/portfolio',
  20. '/en/about', '/me/about', '/ru/about', '/ua/about',
  21. '/en/contact', '/me/contact', '/ru/contact', '/ua/contact'
  22. ],
  23. renderer: new prerender.PuppeteerRenderer({
  24. renderAfterDocumentEvent: 'render-event',
  25. injectProperty: '__PRERENDER_INJECTED',
  26. renderAfterTime: 2000,
  27. maxTimeout: 60000, // Finish anyway after 60s
  28. headless: true,
  29. args: [
  30. '--no-sandbox',
  31. '--disable-setuid-sandbox',
  32. '--disable-dev-shm-usage',
  33. '--disable-gpu',
  34. '--single-process'
  35. ]
  36. })
  37. })
  38. ],
  39. resolve: {
  40. alias: {
  41. "@": path.resolve(__dirname, "./src"),
  42. },
  43. },
  44. build: {
  45. outDir: 'dist',
  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: 'esnext',
  61. },
  62. test: {
  63. globals: true,
  64. environment: "jsdom",
  65. },
  66. };
  67. });