vite.config.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /// <reference types="vitest" />
  2. import { defineConfig, loadEnv } from "vite";
  3. import react from "@vitejs/plugin-react";
  4. // eslint-disable-next-line import/no-extraneous-dependencies
  5. import viteTsconfigPaths from "vite-tsconfig-paths";
  6. export default defineConfig(({ mode }) => {
  7. const {
  8. VITE_BACKEND_HOST = "127.0.0.1:3000",
  9. VITE_USE_TLS = "false",
  10. VITE_FRONTEND_PORT = "3001",
  11. VITE_INSECURE_SKIP_VERIFY = "false",
  12. VITE_WATCH_USE_POLLING = "false",
  13. } = loadEnv(mode, process.cwd());
  14. const USE_TLS = VITE_USE_TLS === "true";
  15. const INSECURE_SKIP_VERIFY = VITE_INSECURE_SKIP_VERIFY === "true";
  16. const PROTOCOL = USE_TLS ? "https" : "http";
  17. const WS_PROTOCOL = USE_TLS ? "wss" : "ws";
  18. const API_URL = `${PROTOCOL}://${VITE_BACKEND_HOST}/`;
  19. const WS_URL = `${WS_PROTOCOL}://${VITE_BACKEND_HOST}/`;
  20. const FE_PORT = Number.parseInt(VITE_FRONTEND_PORT, 10);
  21. // check BACKEND_HOST is something like "example.com"
  22. if (!VITE_BACKEND_HOST.match(/^([\w\d-]+(\.[\w\d-]+)+(:\d+)?)/)) {
  23. throw new Error(
  24. `Invalid BACKEND_HOST ${VITE_BACKEND_HOST}, example BACKEND_HOST 127.0.0.1:3000`,
  25. );
  26. }
  27. return {
  28. // depending on your application, base can also be "/"
  29. base: "",
  30. plugins: [
  31. react({
  32. include: "src/**/*.tsx",
  33. }),
  34. viteTsconfigPaths(),
  35. ],
  36. clearScreen: false,
  37. server: {
  38. watch: {
  39. usePolling: VITE_WATCH_USE_POLLING === "true",
  40. },
  41. port: FE_PORT,
  42. proxy: {
  43. "/api": {
  44. target: API_URL,
  45. changeOrigin: true,
  46. secure: !INSECURE_SKIP_VERIFY,
  47. },
  48. "/ws": {
  49. target: WS_URL,
  50. ws: true,
  51. changeOrigin: true,
  52. secure: !INSECURE_SKIP_VERIFY,
  53. },
  54. },
  55. },
  56. test: {
  57. environment: "jsdom",
  58. globals: true,
  59. setupFiles: ["vitest.setup.ts"],
  60. coverage: {
  61. reporter: ["text", "json", "html", "lcov", "text-summary"],
  62. reportsDirectory: "coverage",
  63. include: ["src/**/*.{ts,tsx}"],
  64. },
  65. },
  66. };
  67. });