vite.config.ts 1.7 KB

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